Cómo descomprimir un tar.gz en otro directorio

270

Tengo un archivo

* .tar.gz

¿Cómo puedo descomprimir esto en un directorio de destino?

Mercer
fuente
9
¿Por qué todos los votos negativos? Hay más opciones que solo -C (y tal vez su versión no proporciona esto).
Alfe
2
Stack Overflow es un sitio para preguntas de programación y desarrollo. Esta pregunta parece estar fuera de tema porque no se trata de programación o desarrollo. Consulte los temas sobre los que puedo preguntar aquí en el Centro de ayuda. Quizás Super User o Unix & Linux Stack Exchange sería un mejor lugar para preguntar.
jww
@jww Mientras veo su punto de etiquetas también hemos nombrado tary gzvueltas en este foro. Extraer un tarball en un directorio específico puede ser parte de un script de shell y, por lo tanto, parte de la programación. Supongo que este tipo de preguntas se pueden hacer en cualquier foro entonces.
Alfe

Respuestas:

319

Puede usar la opción -C(o --directorysi prefiere las opciones largas) para dar el directorio de destino de su elección en caso de que esté usando la versión Gnu de tar. El directorio debe existir:

mkdir foo
tar -xzf bar.tar.gz -C foo

Si no está utilizando una tarcapacidad de extracción a un directorio específico, puede simplemente cdingresar a su directorio de destino antes de llamar tar; entonces tendrá que dar una ruta completa a su archivo, por supuesto. Puede hacer esto en una subshell de alcance para evitar influir en el script circundante:

mkdir foo
(cd foo; tar -xzf ../bar.tar.gz)  # instead of ../ you can use an absolute path as well

O bien, si ni una ruta absoluta ni una ruta relativa al archivo de almacenamiento son adecuadas, también puede usar esto para nombrar el archivo fuera del subshell de alcance:

TARGET_PATH=a/very/complex/path/which/might/even/be/absolute
mkdir -p "$TARGET_PATH"
(cd "$TARGET_PATH"; tar -xzf -) < bar.tar.gz
Alfe
fuente
107
gzip -dc archive.tar.gz | tar -xf - -C /destination

o con GNU tar

tar xzf archive.tar.gz -C /destination
Mercer
fuente
3
Me gusta la idea de usar gzipen caso de que el tar no entienda los archivos comprimidos.
Alfe
4

Extrae myArchive.tar a / destinationDirectory

Comandos:

cd /destinationDirectory
pax -rv -f myArchive.tar -s ',^/,,'
javaPlease42
fuente
0

Puede usar for loop para descomprimir múltiples archivos .tar.gz en otra carpeta. El siguiente código tomará / destination / folder / path como argumento para el script y descomprimirá todos los archivos .tar.gz presentes en la ubicación actual en / destination / folder / path.

if [ $# -ne 1 ];
 then
 echo "invalid argument/s"
 echo "Usage: ./script-file-name.sh /target/directory"
 exit 0
fi
for file in *.tar.gz
do
    tar -zxvf "$file" --directory $1
done
Rahul Shivalkar
fuente