Normalmente, nem gzip nem tar podem criar "o menor absoluto tar.gz". Existem muitos utilitários de compactação que podem ser compactados no formato gz. Eu escrevi um script " gz99 " para tentar gzip
, 7z
e advdef
para obter o menor arquivo. Para usar isso para criar o menor arquivo possível, execute:
tar c path/to/data | gz99 file.gz
O advdef
utilitário do AdvanceCOMP geralmente fornece o arquivo menor, mas também é com erros (o gz99
utilitário verifica se 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
Isso criará um arquivo gz padrão que pode ser lido pelo gzip e tar normalmente, apenas um pouquinho menor. É 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 deseja o menor arquivo ".tar.gz", talvez não saiba que existem formatos mais eficientes que podem ser usados com arquivos tar, como o xz. Geralmente, mudar para um formato diferente pode proporcionar uma melhoria muito melhor na compactação do que brincar com as opções gzip. A principal desvantagem do xz é que ele não é tão comum quanto o gzip; portanto, as pessoas para quem você envia o arquivo precisam instalar um novo pacote. Também tende a ser um pouco mais lento, principalmente ao comprimir. Se isso não lhe interessa e você realmente deseja o menor arquivo tar, tente:
tar cv path/to/data | xz -9 > file.tar.xz
Versões modernas do tar, por exemplo, no Ubuntu 13.10, detectam automaticamente arquivos compactados. Portanto, mesmo se você usar a compactação xz, ainda poderá descompactar como de costume:
tar xvf file.tar.xz
Para ter uma idéia rápida de como esses utilitários de compactação se comparam, considere o efeito de compactar o patch-3.1.1 no 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 7z -tgzip seja quase tão bom e muito menos bugs). Também vemos que mudar para xz nos dá muito mais espaço do que tentar extrair o máximo do antigo formato gz, sem que a compactação demore muito.