2010-06-01 14 views
23

Me gustaría desbloquear un archivo, p. "tar123.tar.gz" al directorio/myunzip/tar123/"usando un comando de shell.untar filename.tr.gz al directorio "nombre de archivo"

tar -xf tar123.tar.gz descomprimirá los archivos pero en el mismo directorio en el que estoy trabajando.

Si el nombre de archivo sería "tar233.tar.gz", quiero que se descomprima en /myunzip/tar233.tar.gz "para que el directorio de destino se base en el nombre del archivo.

¿Alguien sabe si el comando tar puede hacer esto?

Respuesta

30

Con Bash y GNU tar:

file=tar123.tar.gz 
dir=/myunzip/${file%.tar.gz} 
mkdir -p $dir 
tar -C $dir -xzf $file 
+0

el problema aquí es que no sé cuál será el nombre del archivo. Será un archivo versionado así que hoy puede ser 1.tar.gz pero mañana podría ser 2.tar.gz. ¿Hay alguna manera de decir "file = what-ever-in/home/user"? – Jorre

+0

Vas a tener que saberlo de alguna manera. Si ordenan, puede usar algo como 'file = $ (ls -1 $ pattern | tail -1)'. –

4

Puede cambiar el directorio antes de extraerlo con el indicador -C, pero el directorio ya debe existir. (Si crea directorios en archivos específicos, recomiendo fuertemente contra llamándolos foo.tar.gz -.. La extensión implica que se trata de un archivo de almacenamiento pero en realidad es un directorio que conducen se a confusión)

2

Trate

file=tar123.tar.gz 
dir=/myunzip/$(basename $file .tar.gz) # matter of taste and custom here 
[ -d "$dir" ] && { echo "$dir already exists" >&2; exit 1; } 
mkdir "$dir" && (gzip -d "$file | (cd "$dir" && tar xf -)) 

Si está utilizando GNU tar también puede darle una opción -C "$dir" que hará que cambie al directorio antes de extraerlo. Pero el código anterior debería funcionar incluso con un alquitrán de la Edad de Bronce.

Descargo de responsabilidad: ninguno del código anterior ha sido probado.

23
tar -xzvf filename.tar.gz -C destination_directory 
+1

Solo necesitaba la parte '-C', ¡gracias! – juanmirocks

Cuestiones relacionadas