¿Cómo extraigo con tar a un directorio diferente?

18

Esto no funciona

tar xf /tmp/foo.tar.gz foo/bar
tar: foo/bar: Not found in archive

No es obvio para mí qué haría esto más allá de extraerlo en su lugar y mover los archivos.

Kit Sunde
fuente

Respuestas:

28

De man tar:

     -C directory
         In c and r mode, this changes the directory before adding the
         following files.  In x mode, change directories after opening the
         archive but before extracting entries from the archive.

es decir, tar xC /foo/bar -f /tmp/foo.tar.gzdebe hacer el trabajo. (en FreeBSD, pero el tar de GNU es básicamente el mismo a este respecto, consulte "Cambio del directorio de trabajo" en su manual )

sr_
fuente
44
Recomiendo probar este comportamiento con versiones de tar que no sean GNU . La página del manual de Solaris solo menciona esta opción en combinación de operaciones de agregar y reemplazar . Siendo curioso, lo he probado con una operación de extracción . Solaris' de alquitrán no no emite ningún error o advertencia y extrae el archivo en la carpeta actual =: - /
ktf
1
Tampoco funciona en la versión AIX de tar: 'Archivo -C no presente en el archivo' - el '-C' funciona para crear tarballs.
DarkHeart
¿Es posible cambiar el directorio principal con un nuevo nombre?
tofutim
9

si desea extraer un archivo tar en otro lugar, simplemente cd al directorio de destino y descomprimirlo allí:

 mkdir -p foo/bar
 cd foo/bar
 tar xzvf /tmp/foo.tar.gz

El comando que ha utilizado buscaría el archivo foo/baren el archivo y lo extraería.

ktf
fuente
9

Haciendo:

(cd foo/bar ; tar xf /tmp/foo.tar.gz )

haría el trabajo

Básicamente, lo que hace es generar un nuevo shell (los paréntesis), en este subshell, cambiar el directorio foo/bary luego descomprimir el archivo.

Puede cambiar el ;by a &&para asegurarse de que cdfunciona bien.

jfg956
fuente
1
¡Wow, que puedes comenzar un shell así es genial! No tenía idea de que pudieras hacer eso.
Kit Sunde
0
tar -xf ancd.tar.gz my/name/file

puede dar el nombre del archivo con ./filedespués del archivo tar.

tar -xf ancd.tar.gz ./my/name/file

si funciona significa que ha creado un alquitrán con ./. use menos comando para ver el contenido de alquitrán.

less ...tar.file  
usuario2761565
fuente
0

Me encontré con lo que parece ser un problema similar y lo resolví.

El problema estaba en la creación del archivo en lugar del archivo creado.

Al intentar tar y transferir un archivo en el directorio A, proporcioné la ruta al archivo original en el comando tar

tar -cvf MyFile.tar /foo/bar/dir/not/needed/path/*

Lo que pude hacer para resolver es

cd /foo/bar/dir/not/needed/
tar -cvf /tmp/MyFile.tar path*

Al transferir y extraer el tarball, se crean las subdirecciones requeridas.

tar -xvf MyFile.tar
OtisM
fuente
0

Cambia el directorio donde quieres extraer

cd /u02/restore

si la ubicación del archivo de extracción en /u01/backup.tar entonces

Extraer de la siguiente manera:

cd /u02/restore
tar -xvf /u01/backup.tar
Teja
fuente
0

El comando:

tar -xzvf foo.tar.gz -C /home/user/bar/

extraerá el archivo de entrada "foo.tar.gz" en el directorio /home/user/bar, mientras imprime los archivos procesados.

tzabal
fuente