Risposte:
GZIP=-9 tar cvzf file.tar.gz /path/to/directory
supponendo che stai usando bash. In genere, impostare la variabile di ambiente GZIP su "-9" ed eseguire tar normalmente.
Inoltre, se vuoi davvero la migliore compressione, non usare gzip. Usa lzma o 7z.
E quando usi gzip (che è comunque una buona idea per vari motivi) considera di usare il pigz
programma e non il gzip
.
GZIP_OPT
, l'uso dovrebbe essere lo stesso.
Invece di usare il flag gzip per tar, gzip i file manualmente dopo il processo tar, quindi 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 riga di comando di gzip dice a gzip di usare il massimo livello di compressione possibile (il valore predefinito è -6).
Modifica: riga di comando della pipe fissa basata sul commento @depesz.
tar cvf - /path/to/directory | gzip -9 - > file.tar.gz
file.tar
, poiché gzip
aggiunge l'estensione ".gz".
f -
? se non ci sono file, allora è stdin / out
Le versioni moderne di tar supportano il formato di archivio xz (GNU tar, dal 1.22 nel 2009, Busybox dal 1.17.0 nel 2010).
È basato su lzma2 , un po 'come una versione 7-zip di gz . Ciò fornisce una migliore compressione se si è d'accordo con il requisito di richiedere il supporto xz.
tar -Jcvf file.tar.xz /path/to/directory
Ho appena scoperto qui (fondamentalmente un inganno di questa domanda, ma nello stackexchange di Unix) che esiste anche una variabile d'ambiente XZ_OPT = -9 per controllare il livello di compressione XZ simile a quello GZIP nell'altro post.
XZ_OPT=-9 tar -Jcvf file.tar.xz /path/to/directory
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
indica che l'output è un file. Impostandolo su -
(stdout), tar scrive il suo output su stdout, che è il comportamento predefinito senza entrambi f
e -
.
E come affermato dalla gzip
pagina man, se non viene specificato alcun file gzip comprimerà dall'input standard. Non è necessario per -
la gzip
chiamata.
L'opzione --best
(equivalente a -9
) imposta il livello di compressione più alto.
xz
e pixz
troppo. È un ottimo modo per controllare il numero di thread utilizzati per la compressione parallela senza dover creare un file .tar intermedio. In questo modotar -cv /path/to/dir | pixz -p4 > output.tpxz
C'è anche l'opzione per specificare il programma di compressione usando -I. Ciò può includere l'opzione del livello di compressione.
tar -I 'gzip -9' -cvf file.tar.gz /path/to/directory
-I
, cercheranno di trattare l'intera cosa come un nome di programma da eseguire, e quindi falliranno. Almeno dal tar 1.29 di Debian Stretch, questo funziona.
top
e vederlo usando ovunque tra il 200% -400 $ CPU.