Por lo general, ni gzip ni tar pueden crear "el tar.gz más pequeño absoluto". Hay muchas utilidades de compresión que pueden comprimir al formato gz. He escrito un script bash " gz99 " para tratar gzip
, 7z
y advdef
para obtener el archivo más pequeño. Para usar esto para crear la ejecución de archivo más pequeña posible:
tar c path/to/data | gz99 file.gz
La advdef
utilidad de AdvanceCOMP generalmente proporciona el archivo más pequeño, pero también tiene errores (la gz99
utilidad verifica que no haya dañado el archivo antes de aceptar la salida de advdef
). Para usar advdef
directamente, crea file.tar.gz como quieras. Entonces corre:
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, solo un poco más pequeño. Esto es lo mejor que puedes hacer con el formato gz.
Como recientemente aprendió que el tar puede comprimirse y no dijo por qué quería el archivo ".tar.gz" más pequeño, es posible que no sepa que se pueden usar formatos más eficientes con los archivos tar, como xz. En general, cambiar a un formato diferente puede proporcionar una mejora mucho mejor en la compresión que jugar 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ía el archivo podrían tener que instalar un nuevo paquete. También tiende a ser un poco más lento, especialmente cuando se comprime. 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. Entonces, incluso si usa la compresión xz, aún puede descomprimir como de costumbre:
tar xvf file.tar.xz
Para dar una idea rápida de cómo se comparan estas utilidades de compresión, considere el efecto de comprimir el parche 3.1.1 del núcleo 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 mucho menos defectuoso). También vemos que cambiar a xz nos da mucho más espacio que tratar de aprovechar al máximo el antiguo formato gz, sin que la compresión tarde demasiado.