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

Come specificare il livello di compressione quando si usa tar -zcvf?

Io gzippo le directory molto spesso al lavoro. Quello che faccio normalmente è

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

C'è un modo per specificare il livello di compressione qui? Voglio usare la migliore compressione possibile anche se ci vuole più tempo per comprimere.

Risposte (5)

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

Invece di usare il flag gzip per tar, gzippa i file manualmente dopo il processo tar, poi puoi specificare il livello di compressione per il programma gzip:

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

Oppure potresti usare:

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

Il -9 nella linea di comando gzip dice a gzip di usare il massimo livello di compressione possibile (il default è -6).

Modifica: Corretta la linea di comando pipe in base al commento di @depesz.

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

Le versioni moderne di tar supportano il formato di archivio xz (GNU tar, dalla 1.22 nel 2009, Busybox dalla 1.17.0 nel 2010).

È basato su lzma2 , una specie di versione 7-Zip di gz . Questo dà una migliore compressione se ti va bene il requisito di aver bisogno del supporto xz.

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

Ho appena scoperto qui (praticamente un duplicato di questa domanda, ma nello stackexchange di Unix) che c'è anche una variabile d'ambiente XZ_OPT=-9 per controllare il livello di compressione XZ simile a quella di GZIP nell'altro 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

Questa è la seconda soluzione di Matrix Mole, ma leggermente abbreviata:

Quando si chiama tar, l'opzione f dichiara che l'output è un file. Impostandola a - (stdout) fa sì che tar scriva il suo output su stdout, che è il comportamento predefinito senza entrambi f e -.

E come detto nella pagina man di gzip, se non viene specificato alcun file, gzip comprimerà dallo standard input. Non c'è bisogno di - nella chiamata gzip.

L'opzione --best (equivalente a -9) imposta il massimo livello di compressione.

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

C'è anche l'opzione per specificare il programma di compressione usando -I. Questo può includere l'opzione del livello di compressione.

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

E naturalmente il tar derivato da macOS bsd deve essere diverso:

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