Como especificar o nível de compactação ao usar o tar -zcvf?

125

Eu gzip diretórios muitas vezes no trabalho. O que eu normalmente faço é

tar -zcvf file.tar.gz /path/to/directory

Existe uma maneira de especificar o nível de compactação aqui? Quero usar a melhor compactação possível, mesmo que demore mais tempo para compactar.

    
por Lazer 01.07.2011 / 20:00

5 respostas

124

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

assumindo que você esteja usando o bash. Geralmente, defina a variável de ambiente GZIP como "-9" e execute tar normalmente.

Além disso, se você realmente deseja a melhor compactação, não use o gzip. Use lzma ou 7z.

E ao usar o gzip (o que é uma boa ideia por vários motivos) considere usar o programa pigz e não o gzip .

    
por 01.07.2011 / 20:38
62

Em vez de usar o sinalizador gzip para tar, gzip os arquivos manualmente após o processo tar, você pode especificar o nível de compactação para o programa gzip:

tar -cvf files.tar /path/to/file0 /path/to/file1 ; gzip -9 files.tar

Ou você pode usar:

tar cvf - /path/to/file0 /path/to/file1 | gzip -9 - > files.tar.gz

O -9 na linha de comando gzip diz ao gzip para usar o nível máximo de compressão possível (o padrão é -6).

Editar: linha de comando de cano fixo com base no comentário @depesz.

    
por 01.07.2011 / 20:25
44

Versões modernas de tar suportam o formato de arquivo xz (tar GNU, desde 1.22 em 2009, Busybox < href="http://www.busybox.net/news.html"> desde 1.17.0 em 2010).

Ele é baseado em lzma2 , como uma espécie de Versão 7-Zip do gz . Isso dá uma melhor compactação se você estiver satisfeito com o requisito de precisar do suporte ao xz.

tar -Jcvf file.tar.xz /path/to/directory

Acabei de descobrir aqui (basicamente um dupe desta questão, mas no Unix stackexchange) que existe também uma variável de ambiente XZ_OPT = -9 para controlar o nível de compressão XZ similar ao GZIP no outro post.

XZ_OPT=-9 tar -Jcvf file.tar.xz /path/to/directory
    
por 19.12.2012 / 04:03
28
tar cv /path/to/directory | gzip --best > file.tar.gz

Esta é a segunda solução da Matrix Mole, mas ligeiramente encurtada:

Ao chamar tar, a opção f indica que a saída é um arquivo. A configuração para - (stdout) faz com que o tar grave sua saída para stdout, que é o comportamento padrão sem f e - .

E, como indicado pela página gzip man, se nenhum arquivo for especificado, o gzip será compactado a partir da entrada padrão. Não há necessidade de - na chamada gzip .

A opção --best (equivalente a -9 ) define o nível mais alto de compactação.

    
por 04.02.2013 / 19:17
10

Há também a opção de especificar o programa de compactação usando -I. Isso pode incluir a opção de nível de compactação.

tar -I 'gzip -9' -cvf file.tar.gz /path/to/directory
    
por 21.06.2016 / 06:21