Como obter compactação máxima com .tar.gz? [duplicado]

50

A maneira como eu entendo o uso de tar + gzip é que tar é normalmente usado para consolidar um agrupamento de arquivos em um único arquivo, então gzip é usado para compactar esse arquivo.

Eu aprendi recentemente que tar também pode compactar.

Como eu não entendo completamente como a compactação funciona @ é o seu núcleo, eu tenho (possivelmente ridículo) preocupações de que enviar um .tar para o gzip pré-comprimido possa impedir que o gzip seja compactado, assim como seu potencial permitiria e coisas dessa natureza .

Minha pergunta é essencialmente: Que combinação de métodos args / compression eu devo usar para criar o menor tar.gz absoluto, e como é a declaração da linha de comando?

    
por Mario Zigliotto 01.12.2012 / 21:47

4 respostas

91

Ou, você pode dizer ao tar para compactação máxima do usuário desta maneira:

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

Além disso, para manter seus envoltórios livres de bagunça, você pode fazer isso:

env GZIP=-9 tar cvzf file.tar.gz /path/to/directory
    
por 31.01.2013 / 19:55
38

Como você afirmou, " tar pode também comprimir ", implica que - tar não sempre comprime dados por si só.

Faz isso somente quando usado com a opção z . Isso também não por si só, mas - passando os dados tarrados através do gzip.

No entanto, como mencionado em esta resposta, você pode enviar os dois comandos: tar & gzip , de forma que você possa especificar explicitamente o nível de compactação para o comando gzip para obter o menor tamanho de saída.

tar cvf - /path/to/directory | gzip -9 - > file.tar.gz

Aqui 9 especifica o nível máximo de compactação possível.

    
por 02.12.2012 / 04:37
13

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.

    
por 10.03.2014 / 16:23
6
tar c /path/to/data | gzip --best > file.tar.gz

gzip option --best (equivalente a -9 ) solicita o nível mais alto de compactação.

    
por 06.02.2014 / 19:25