¿Puedo comprimir una carpeta completa usando gzip?

¿Puedo comprimir una carpeta completa usando gzip?

Estoy intentando comprimir una carpeta en Unix. ¿Se puede hacer eso usando el comando gzip?

Respuesta1

No.

A diferencia de zip, gzipfunciona como un algoritmo de compresión.solo.

Debido a varias razones , algunas de las cuales se remontan a la era de las unidades de cinta, Unix utiliza un programa llamado tarpara archivar datos, que luego se pueden comprimir con un programa de compresión como gzip,,, etc.bzip27zip

Para "comprimir" un directorio, el comando correcto sería

tar -zcvf archive.tar.gz directory/ 

Esto le dirá tara

  • comprimirlo usando elzalgoritmo (gzip)

  • C(crear) un archivo a partir de los archivos endirectory( tares recursivo por defecto)

  • v(detalladamente) enumera (en /dev/stderr para que no afecte los comandos canalizados) todos los archivos que agrega al archivo.

  • y almacenar la salida comoF(archivo) llamadoarchive.tar.gz

El tarcomando ofrece gzipsoporte (a través de la -zbandera) únicamente para su conveniencia. El gzipcomando/lib está completamente separado. El comando anterior es efectivamente el mismo que

tar -cv directory | gzip > archive.tar.gz

Para descomprimir y descomprimir el archivo en el directorio actual, usaría

tar -zxvf archive.tar.gz

Ese comando es efectivamente el mismo que

gunzip < archive.tar.gz | tar -xv

tartiene muchas, muchas, MUCHAS otras opciones y usos también; Recomiendo de todo corazón leer su página de manual en algún momento.

Respuesta2

El gzipcomando no comprimirá recursivamente un directorio en un único archivo zip cuando se utilice el -rmodificador. Más bien, recorrerá esa estructura de directorios y comprimirá cada archivo que encuentre en un archivo separado.

Ejemplo

antes

$ tree dir1/
dir1/
|-- dir11
|   |-- file11
|   |-- file12
|   `-- file13
|-- file1
|-- file2
`-- file3

ahora ejecuta el gzipcomando

$ gzip -r dir1

después

$ tree dir1/
dir1/
|-- dir11
|   |-- file11.gz
|   |-- file12.gz
|   `-- file13.gz
|-- file1.gz
|-- file2.gz
`-- file3.gz

Si prefiere comprimir la estructura del directorio, probablemente desee utilizar el tarcomando y luego comprimir el .tararchivo resultante.

$ tar zcvf dir1.tar.gz dir1/

Ejemplo

$ tar zcvf dir1.tar.gz dir1/
dir1/
dir1/file1
dir1/file2
dir1/dir11/
dir1/dir11/file11.gz
dir1/dir11/file12.gz
dir1/dir11/file13.gz
dir1/file3

Lo que da como resultado el siguiente archivo único:

$ ls -l | grep tar
-rw-rw-r-- 1 saml saml  271 Oct  1 08:07 dir1.tar.gz

Puedes confirmar su contenido:

$ tar ztvf dir1.tar.gz 
drwxrwxr-x saml/saml         0 2013-10-01 08:05 dir1/
-rw-rw-r-- saml/saml         0 2013-10-01 07:45 dir1/file1
-rw-rw-r-- saml/saml         0 2013-10-01 07:45 dir1/file2
drwxrwxr-x saml/saml         0 2013-10-01 08:04 dir1/dir11/
-rw-rw-r-- saml/saml        27 2013-10-01 07:45 dir1/dir11/file11.gz
-rw-rw-r-- saml/saml        27 2013-10-01 07:45 dir1/dir11/file12.gz
-rw-rw-r-- saml/saml        27 2013-10-01 07:45 dir1/dir11/file13.gz
-rw-rw-r-- saml/saml         0 2013-10-01 07:45 dir1/file3

Respuesta3

La respuesta a la pregunta "¿Puedo comprimir una carpeta completa usando gzip [en Linux]?" es que puedes usar el zipprograma en lugar de gzip, con la sintaxis:

zip -r <zip file name> <folder to zip>

Respuesta4

Recomiendo usar pigz(Implementación paralela de GZip)

tar -cvf - dir | pigz -9 > /path/to/dir.tar.gz

información relacionada