2011-07-01 18:00:22 +0000 2011-07-01 18:00:22 +0000
149
149

Como especificar o nível de compressão quando se usa alcatrão -zcvf?

Eu dirijo directórios de gzip muito frequentemente no trabalho. O que normalmente faço é

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

Existe aqui alguma forma de especificar o nível de compressão? Quero utilizar a melhor compressão possível, mesmo que leve mais tempo a comprimir.

Respostas (5)

69
69
69
2011-07-01 18:25:45 +0000

Em vez de utilizar a bandeira gzip para alcatrão, gzipar os ficheiros manualmente após o processo de alcatrão, depois pode especificar o nível de compressão para o programa gzip:

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

Ou pode usar:

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

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

Editar: Linha de comando de tubo fixo com base no comentário @depesz.

55
55
55
2012-12-19 03:03:43 +0000

As versões modernas do alcatrão suportam o formato de arquivo xz (alcatrão GNU, desde 1.22 em 2009, Busybox desde 1.17.0 em 2010).

É baseado em lzma2 , como um 7-Zip versão de gz . Isto permite uma melhor compressão se estiver de acordo com a necessidade de suporte xz.

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

acabei de descobrir aqui (basicamente uma duplicação desta pergunta, mas na troca de stackex Unix) que existe também uma variável de ambiente XZ_OPT=-9 para controlar o nível de compressão XZ semelhante ao GZIP um no outro post.

XZ_OPT=-9 tar -Jcvf file.tar.xz /path/to/directory
34
34
34
2013-02-04 18:17:32 +0000
tar cv /path/to/directory | gzip --best > file.tar.gz

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

Ao chamar alcatrão, a opção f afirma que a saída é um ficheiro. Definindo-o para - (stdout) faz com que o alcatrão escreva a sua saída para stdout, que é o comportamento padrão sem ambos f e -.

e, como indicado pela página gzip man, se não forem especificados ficheiros gzip irá comprimir a partir da entrada padrão. Não há necessidade de - na chamada gzip.

Opção --best (equivalente a -9) estabelece o nível de compressão mais alto.

10
10
10
2016-06-21 04:21:54 +0000

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

tar -I 'gzip -9' -cvf file.tar.gz /path/to/directory
3
3
3
2019-01-19 16:26:40 +0000

E, claro, o alcatrão derivado de macOS bsd tem de ser diferente:

tar -czf file.tar.gz --options gzip:compression-level=9 /path/to/directory