Respostas:
GZIP=-9 tar cvzf file.tar.gz /path/to/directory
supondo que você esteja usando o bash. Geralmente, defina a variável de ambiente GZIP como "-9" e execute o tar normalmente.
Além disso - se você realmente deseja uma melhor compactação, não use o gzip. Use lzma ou 7z.
E ao usar o gzip (que é uma boa ideia por várias razões) considere usar o pigz
programa e não o gzip
.
GZIP_OPT
, o uso deve ser o mesmo.
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 do 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 compactação possível (o padrão é -6).
Edit: Corrigida a linha de comando do pipe com base no comentário @depesz.
file.tar
, pois gzip
adiciona a extensão ".gz".
f -
? Se não houver nenhum arquivo, então é stdin / out
As versões modernas do tar suportam o formato de arquivo xz (tar GNU, desde 1,22 em 2009, Busybox desde 1,17.0, em 2010).
É baseado no lzma2 , como uma versão 7-Zip do gz . Isso proporciona uma melhor compactação se você estiver de acordo com o requisito de precisar do suporte ao xz.
tar -Jcvf file.tar.xz /path/to/directory
Eu acabei de descobrir aqui (basicamente um truque dessa pergunta, mas no Unix stackexchange) que também há uma variável de ambiente XZ_OPT = -9 para controlar o nível de compactação XZ semelhante ao GZIP no outro post.
XZ_OPT=-9 tar -Jcvf file.tar.xz /path/to/directory
tar cv /path/to/directory | gzip --best > file.tar.gz
Esta é a segunda solução da Matrix Mole, mas ligeiramente reduzida:
Ao chamar o 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 os dois f
e -
.
E como declarado na gzip
página de manual, se nenhum arquivo for especificado, o gzip será compactado a partir da entrada padrão. Não há necessidade -
na gzip
ligação.
A opção --best
(equivalente a -9
) define o nível de compactação mais alto.
xz
e pixz
também. É uma ótima maneira de controlar o número de threads usados para compactação paralela sem precisar criar um arquivo .tar intermediário. Como assimtar -cv /path/to/dir | pixz -p4 > output.tpxz
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
-I
arg, elas tentam tratar a coisa toda como um nome de programa para exec e, portanto, falham. Pelo menos a partir do tar 1.29 no Debian Stretch, isso funciona.
top
e vê-lo usando algo entre 200% -400 $ CPU.