Estoy intentando comprimir una carpeta en Unix. ¿Se puede hacer eso usando el comando gzip?
Respuesta1
No.
A diferencia de zip
, gzip
funciona 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 tar
para archivar datos, que luego se pueden comprimir con un programa de compresión como gzip
,,, etc.bzip2
7zip
Para "comprimir" un directorio, el comando correcto sería
tar -zcvf archive.tar.gz directory/
Esto le dirá tar
a
comprimirlo usando elzalgoritmo (gzip)
C(crear) un archivo a partir de los archivos en
directory
(tar
es 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) llamado
archive.tar.gz
El tar
comando ofrece gzip
soporte (a través de la -z
bandera) únicamente para su conveniencia. El gzip
comando/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
tar
tiene 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 gzip
comando no comprimirá recursivamente un directorio en un único archivo zip cuando se utilice el -r
modificador. 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 gzip
comando
$ 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 tar
comando y luego comprimir el .tar
archivo 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 zip
programa 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