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 pigzprogramma 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é gzipaggiunge 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 findica che l'output è un file. Impostandolo su -(stdout), tar scrive il suo output su stdout, che è il comportamento predefinito senza entrambi fe -.
E come affermato dalla gzippagina man, se non viene specificato alcun file gzip comprimerà dall'input standard. Non è necessario per -la gzipchiamata.
L'opzione --best(equivalente a -9) imposta il livello di compressione più alto.
xze pixztroppo. È 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.
tope vederlo usando ovunque tra il 200% -400 $ CPU.