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.