Cómo extraer archivos a otro directorio usando el comando 'tar'?

Pensé tar archive.tar /users/mylocation funcionaría, pero no es así. ¿Cómo puedo hacer eso?

Para extraer un archivo en un directorio diferente al actual, utilice el comando -C, o --directory, opción de alquitrán, como en

tar -xf archive.tar -C /target/directory

Tenga en cuenta que el directorio de destino debe existir antes de ejecutar ese comando (se puede crear mediante mkdir /target/directory).

Lea el página de manual (comando: man tar) para otras opciones.

Tenga en cuenta que si su tarball ya contiene un nombre de directorio que desea cambiar, agregue el --strip-components=1 opcion:

tar xf archive.tar -C /target/directory --strip-components=1

Combinar las respuestas y los 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

Otra opción es usar --one-top-level. Esto creará automáticamente un directorio basado en el nombre de archivo del original.

tar zxvf filename.tgz --one-top-level

Además, si lo desea, puede especificar el suyo y tar lo creará automáticamente.

tar zxvf filename.tgz --one-top-level=new_directory

Lo que me pareció interesante en relación con la extracción es que depende de cómo haya creado el archivo, vea este ejemplo

cd /tmpmkdir foldertouch folder/file.txt

cuando lo haces tar -zcvf folder.tar.gz folder todo está como era de esperar = al descomprimirlo ahora será desempaquetado (carpeta será crear, si lo quitó) como /tmp/folder/.

Pero, cuando va a crear alquitrán como tar -zcvf tmp-folder.tar.gz /tmp/folder y descomprimirlo en la carpeta /tmp, el resultado será /tmp/tmp/folder directorio ! En tal caso, debe desenrollarlo para / - tar -xf tmp-folder.tar.gz -C /

@Ujjwal Sing: De hecho, la página de manual de tar no es tan útil. Describe “- C DIR “como” cambiar a directorio DIR”. Peor aún: "archivo tar-C mydir xf.tar “no funciona, mientras que” tar xf archive.tar-C mydir " lo hace.

Además, - C, --directory DIR\n change to directory DIR ' debería describirse como cambiar el directorio de salida a DIR(fallará si DIR no existe)`. Gracias @Mich. Vea también la respuesta de @Bryan_Larsen.

@PatMorin Para ser justos, una vez que entiendes el argumento, llamar a las convenciones que estás usando tiene sentido. También puede hacer ’ tar xfC archive.tar mydir ’ o ’ archivo tar-C mydir-xf.alquitrán`. Es solo mezclar banderas de estilo tradicional y de estilo GNU lo que rompe las cosas, como… honestamente esperaba. 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)