Además, -C, --directory DIR\n change to directory DIRmás bien debería describirse como change output directory to DIR (will fail if DIR doesn't exist). Gracias @Mich. Ver también la respuesta de @ Bryan_Larsen.
válido el
1
@Ujjwal Sing: De hecho, la página del manual de alquitrán no es tan útil. Describe "-C DIR" como "cambiar al directorio DIR". Peor aún: "tar -C mydir xf archive.tar" no funciona, mientras que "tar xf archive.tar -C mydir" sí.
Pat Morin
@PatMorin Para ser justos, una vez que entiendes el argumento que llama convenciones que estás usando tiene sentido. También puedes hacer tar xfC archive.tar mydiro tar -C mydir -xf archive.tar. Solo mezcla banderas de estilo tradicional y de estilo GNU lo que rompe las cosas, como ... honestamente se espera. Las banderas tradicionales se pasan todas como un blob como primer argumento. No puedes esperar que funcionen si no son los primeros. (Quiero decir, sí, es posible interpretarlo de todos modos, mi punto es que estaría por encima y más allá, no estándar)
Nic Hartley
Respuestas:
958
Para extraer un archivo a un directorio diferente al actual, use la opción -Co --directorytar, como en
tar -xf archive.tar -C /target/directory
Tenga en cuenta que el directorio de destino debe existir antes de ejecutar ese comando (puede ser creado por mkdir /target/directory).
Lea la página del manual (comando:) man tarpara otras opciones.
Se puede pelar el camino: es decir, simplemente recuperar el archivo
zzapper
3
Si se trata de un archivo más grande, cuando ejecuta el comando, todo lo que obtiene es que no sale durante varios segundos o incluso minutos mientras está funcionando. Puede solucionar esto agregando la -vbandera ( modo detallado ) que enumera el nombre de cada archivo a medida que lo extrae.
IQAndreas
Si tiene problemas con esto, tenga en cuenta los --strip-components=1consejos de la otra respuesta también.
¿No es sorprendente que, después de todos estos años, con todas las opciones taracumuladas, todavía no haya una opción para crear el directorio de salida si no existe ?
EM0
261
Tenga en cuenta que si su tarball ya contiene un nombre de directorio que desea cambiar, agregue la --strip-components=1opción:
tar xf archive.tar -C /target/directory --strip-components=1
Gracias. Las descargas a través de wget / etc siempre tienen un directorio 'padre'. Esta es la respuesta completa de la OMI, o debe anotarse en la respuesta anterior.
bshea
Justo lo que estaba buscando. --strip-componentses muy útil cuando se ejecutan aprovisionadores que pueden usar diferentes versiones. De esta manera /target/directorypuede ser un nombre genérico, sin tener que preocuparse por cómo el proveedor eligió nombrar su carpeta de archivo.
Jack_Hu
30
Combinando las respuestas y comentarios anteriores:
Para simplemente extraer el contenido y crear el directorio de destino si falta:
mkdir -p /target/directory && tar xf archive.tar -C /target/directory
Para extraer y también eliminar el directorio raíz (primer nivel) en el zip
mkdir -p /target/directory && tar xf archive.tar -C /target/directory --strip-components=1
Estoy usando GNU tar 1.26 y obtengo un error de opción no reconocido para--one-top-level
Emma Strubell
Esta es la respuesta que necesitaba. Muy útil "no" para tener que especificar el nombre del directorio, o recordar un código especial que hará referencia al archivo para el nombre. Gracias.
Hipocrito
2
Lo que encontré interesante en relación con la extracción es que depende de cómo hayas creado el archivo, mira este ejemplo
cd /tmp
mkdir folder
touch folder/file.txt
cuando hace tar -zcvf folder.tar.gz foldertodo es como se esperaba = cuando lo descomprime ahora, no se descomprimirá (la carpeta se creará, si la eliminó) como /tmp/folder/.
Pero, cuando cree tar como tar -zcvf tmp-folder.tar.gz /tmp/foldery lo descomprima en la carpeta / tmp, ¡el resultado será el /tmp/tmp/folderdirectorio! En tal caso, debe descomprimirlo en / -tar -xf tmp-folder.tar.gz -C /
-C, --directory DIR\n change to directory DIR
más bien debería describirse comochange output directory to DIR (will fail if DIR doesn't exist)
. Gracias @Mich. Ver también la respuesta de @ Bryan_Larsen.tar xfC archive.tar mydir
otar -C mydir -xf archive.tar
. Solo mezcla banderas de estilo tradicional y de estilo GNU lo que rompe las cosas, como ... honestamente se espera. Las banderas tradicionales se pasan todas como un blob como primer argumento. No puedes esperar que funcionen si no son los primeros. (Quiero decir, sí, es posible interpretarlo de todos modos, mi punto es que estaría por encima y más allá, no estándar)Respuestas:
Para extraer un archivo a un directorio diferente al actual, use la opción
-C
o--directory
tar, como enTenga en cuenta que el directorio de destino debe existir antes de ejecutar ese comando (puede ser creado por
mkdir /target/directory
).Lea la página del manual (comando:)
man tar
para otras opciones.fuente
-v
bandera ( modo detallado ) que enumera el nombre de cada archivo a medida que lo extrae.--strip-components=1
consejos de la otra respuesta también.tar
acumuladas, todavía no haya una opción para crear el directorio de salida si no existe ?Tenga en cuenta que si su tarball ya contiene un nombre de directorio que desea cambiar, agregue la
--strip-components=1
opción:fuente
--strip-components
es muy útil cuando se ejecutan aprovisionadores que pueden usar diferentes versiones. De esta manera/target/directory
puede ser un nombre genérico, sin tener que preocuparse por cómo el proveedor eligió nombrar su carpeta de archivo.Combinando las respuestas y comentarios anteriores:
Para simplemente extraer el contenido y crear el directorio de destino si falta:
Para extraer y también eliminar el directorio raíz (primer nivel) en el zip
fuente
Otra opción es usar - one-top-level. Esto creará automáticamente un directorio basado en el nombre del archivo del original.
Además, si lo desea, puede especificar el suyo y tar lo creará automáticamente.
fuente
--one-top-level
Lo que encontré interesante en relación con la extracción es que depende de cómo hayas creado el archivo, mira este ejemplo
cuando hace
tar -zcvf folder.tar.gz folder
todo es como se esperaba = cuando lo descomprime ahora, no se descomprimirá (la carpeta se creará, si la eliminó) como/tmp/folder/
.Pero, cuando cree tar como
tar -zcvf tmp-folder.tar.gz /tmp/folder
y lo descomprima en la carpeta / tmp, ¡el resultado será el/tmp/tmp/folder
directorio! En tal caso, debe descomprimirlo en / -tar -xf tmp-folder.tar.gz -C /
fuente
Con tar 1.29, podemos agregar el nombre del directorio después del nombre del archivo tar. Por ejemplo,
fuente