Normalmente, nem o gzip nem o tar podem criar "o menor tar.gz absoluto". Existem muitos utilitários de compactação que podem ser compactados no formato gz. Eu escrevi um script bash " gz99 " para experimentar gzip
, 7z
e advdef
para obter o menor arquivo. Para usar isso para criar a menor execução de arquivo possível:
tar c path/to/data | gz99 file.gz
O utilitário advdef
do AdvanceCOMP geralmente fornece o menor arquivo, mas também apresenta bugs (o utilitário gz99
verifica se ele não corrompeu o arquivo antes de aceitar a saída de advdef
). Para usar advdef
diretamente, crie file.tar.gz como quiser. Então corra:
advdef -z -4 file.tar.gz
Isto irá criar um arquivo gz padrão que pode ser lido por gzip e tar como normal, apenas um pouquinho menor. Isso é o melhor que você pode fazer com o formato gz.
Como você aprendeu recentemente que o tar pode compactar e não disse por que você queria o menor arquivo ".tar.gz", pode ser que você não saiba que existem formatos mais eficientes que podem ser usados com arquivos tar, como como xz. Geralmente, mudar para um formato diferente pode dar uma melhora muito maior na compactação do que mexer nas opções do gzip. A principal desvantagem do xz é que ele não é tão comum quanto o gzip, então as pessoas para quem você envia o arquivo podem ter que instalar um novo pacote. Ele também tende a ser um pouco mais lento, principalmente ao comprimir. Se isso não importa para você, e você realmente quer o menor arquivo tar, tente:
tar cv path/to/data | xz -9 > file.tar.xz
Versões modernas de tar, por exemplo, no Ubuntu 13.10, detectam automaticamente arquivos compactados. Portanto, mesmo que você use a compactação xz, ainda poderá descomprimir como de costume:
tar xvf file.tar.xz
Para ter uma idéia rápida de como esses utilitários de compactação comparam, considere o efeito de compactar o patch-3.1.1 do kernel do 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
Neste exemplo trivial, vemos que, para obter o menor gz, precisamos do advdef (embora o 7z -tgzip seja quase tão bom quanto o buggy). Também vemos que mudar para o xz nos dá muito mais espaço do que tentar extrair o máximo do antigo formato gz, sem que a compactação demore demais.