2012-09-08 22 views
150

Duplicar posible:
gzipping up a set of directories and creating a tar compressed fileCómo gzip todos los archivos en todos los subdirectorios en un archivo comprimido en bash

This post describe cómo gzip cada archivo individualmente dentro de una estructura de directorios. Sin embargo, necesito hacer algo ligeramente diferente. Necesito producir un gran archivo gzip para todos los archivos en un directorio determinado. También necesito poder especificar el nombre de archivo de salida para el archivo comprimido (por ejemplo, files.gz) y sobrescribir el archivo de archivo comprimido anterior, si ya existe uno.

+0

'gzip' por su propia naturaleza sólo comprime un único archivo. Para poner varios archivos en un archivo para el siguiente gzipping, use 'tar'. – Thomas

Respuesta

310
tar -zcvf compressFileName.tar.gz folderToCompress 

todo en folderToCompress irá a compressFileName

Editar: Después de la revisión y los comentarios me di cuenta de que las personas pueden confundirse con compressFileName sin extensión. Si lo desea, puede usar la extensión .tar.gz (como se sugiere) con compressFileName

+1

Gracias. ¿Esto comprimirá todo en "folderToCompress" (es decir, recursivamente)? – Doug

+1

todo en la carpetaToCompress irá a compressFileName – amitchhajer

+73

Probablemente desee elegir 'compressFileName' para que incluya la extensión' .tar.gz' o enloquecerá a todos los demás. – drewish

15

La publicación de @amitchhajer funciona para GNU tar. Si alguien encuentra este post y lo necesita para trabajar en un sistema no GNU, que pueden hacer esto:

tar cvf - folderToCompress | gzip > compressFileName 

Para expandir el archivo:

zcat compressFileName | tar xvf - 
+2

Además de ser portátil, esta solución es útil si quieres pasar argumentos a gzip (por ej., --test o --best), ya que afaik incluso GNU tar no proporciona una forma de enviar argumentos a gzip. –

+0

Esto es versátil, ya que también puede usar otros compresores. Por ejemplo, 'pigz', que es más rápido, ya que puede utilizar mejor la CPU (una implementación multiproceso de zip). –

51

hay un montón de métodos de compresión que funcionan de forma recursiva comandan línea y es bueno saber quién es el público final.

es decir, si se va a enviar a alguien corriendo ventanas continuación, zip, probablemente sería mejor:

zip -r file.zip folder_to_zip 

unzip filenname.zip 

para otros usuarios de Linux o de su auto alquitrán es grande

tar -cvzf filename.tar.gz folder 

tar -cvjf filename.tar.bz2 folder # even more compression 

#change the -c to -x to above to extract 

Hay que tener cuidado con alquitrán y cómo las cosas están asfaltadas arriba/extrae, por ejemplo, si corro

cd ~ 
tar -cvzf passwd.tar.gz /etc/passwd 
tar: Removing leading `/' from member names 
/etc/passwd 


pwd 

/home/miusuario

tar -xvzf passwd.tar.gz 

esto creará /home/miusuario/etc/passwd

seguro si todas las versiones de alquitrán de hacer esto:

Removing leading `/' from member names 
+4

+1 para linux-> windows –

Cuestiones relacionadas