2012-12-01 20:47:48 +0000 2012-12-01 20:47:48 +0000
67
67

¿Cómo obtener la máxima compresión con .tar.gz?

La forma en que entiendo el uso de tar + gzip es que tar se utiliza normalmente para consolidar una agrupación de archivos en un solo archivo, entonces gzip se utiliza para comprimir ese archivo.

Recientemente he aprendido que tar también puede comprimir.

Como no comprendo del todo cómo funciona la compresión en su núcleo, tengo la preocupación (posiblemente ridícula) de que el envío de un .tar precomprimido a gzip pueda impedir que gzip comprima tan bien como su potencial permitiría y cosas de esa naturaleza.

Mi pregunta es esencialmente: ¿Qué combinación de argumentos/métodos de compresión debería utilizar para crear el tar.gz más pequeño posible, y qué aspecto tiene la declaración de la línea de comandos para ello?

Respuestas (4)

118
118
118
2013-01-31 18:55:22 +0000

O bien, puede decirle a tar que utilice la máxima compresión de esta manera:

export GZIP=-9
tar cvzf file.tar.gz /path/to/directory

Además, para mantener sus envvars libres de desorden, puede hacer esto:

env GZIP=-9 tar cvzf file.tar.gz /path/to/directory
44
44
44
2012-12-02 03:37:18 +0000

Como usted ha dicho - “tar puede también comprimir”, implica que - tar no siempre comprime los datos por sí mismo.

Lo hace sólo cuando se utiliza con la opción z. Esto también no por sí mismo, sino - pasando los datos tarados a través de gzip.

Sin embargo, como se indica en esta respuesta, puede canalizar los dos comandos: tar & gzip de forma que pueda especificar explícitamente el nivel de compresión para el comando gzip para conseguir el menor tamaño de salida.

tar cvf - /ruta/directorio | gzip -9 - > archivo.tar.gz

Aquí 9 especifica el máximo nivel de compresión posible.

17
17
17
2014-03-10 15:23:08 +0000

Por lo general, ni gzip ni tar pueden crear “el tar.gz absolutamente más pequeño”. Hay muchas utilidades de compresión que pueden comprimir al formato gz. He escrito un script bash gz99 “ para probar gzip, 7z y advdef para obtener el archivo más pequeño. Para usar esto para crear el archivo más pequeño posible, ejecute

tar c path/to/data | gz99 file.gz

La utilidad advdef de AdvanceCOMP suele dar el archivo más pequeño, pero también tiene fallos (la utilidad gz99 comprueba que no ha corrompido el archivo antes de aceptar la salida de advdef). Para usar advdef directamente, crea el archivo.tar.gz como te parezca. A continuación, ejecute

advdef -z -4 file.tar.gz

Esto creará un archivo gz estándar que puede ser leído por gzip y tar de forma normal, sólo que un poco más pequeño. Esto es lo mejor que puede hacer con el formato gz.

Puesto que hace poco que has aprendido que tar puede comprimir, y no has dicho por qué querías el archivo ”.tar.gz" más pequeño, puede que no sepas que hay formatos más eficientes que se pueden usar con archivos tar, como xz. Por lo general, cambiar de formato puede suponer una mejora de la compresión mucho mayor que juguetear con las opciones de gzip. La principal desventaja de xz es que no es tan común como gzip, por lo que las personas a las que envíes el archivo podrían tener que instalar un nuevo paquete. También suele ser un poco más lento, sobre todo al comprimir. Si esto no te importa, y realmente quieres el archivo tar más pequeño, prueba:

tar cv path/to/data | xz -9 > file.tar.xz

Las versiones modernas de tar, por ejemplo en Ubuntu 13.10, detectan automáticamente los archivos comprimidos. Así que incluso si usas la compresión xz puedes descomprimir como siempre:

tar xvf file.tar.xz

Para dar una idea rápida de cómo se comparan estas utilidades de compresión, considera el efecto de comprimir el parche-3.1.1 del kernel de linux:

utility cpu format size(bytes)
gzip -9 0.02s gz 105,628
advdef -2 0.07s gz 102,619
7z -mx=9 -tgzip 0.42s gz 102,297
advdef -3 0.55s gz 102,290
advdef -4 0.75s gz 101,956
xz -9 0.03s xz 91,064
xz -3e 0.15s xz 90,996

En este ejemplo trivial, vemos que para obtener el gz más pequeño necesitamos advdef (aunque 7z -tgzip es casi tan bueno y con muchos menos errores). También vemos que cambiando a xz ganamos mucho más espacio que intentando exprimir al máximo el antiguo formato gz, sin que la compresión tarde demasiado.

6
6
6
2014-02-06 18:25:54 +0000
tar c /path/to/data | gzip --best > file.tar.gz

gzip opción --best (equivalente a -9) pide el nivel de compresión más alto.