Di solito né gzip né tar possono creare "tar.gz più piccolo in assoluto". Esistono molte utilità di compressione che possono comprimere nel formato gz. Ho scritto uno script bash " gz99 " per cercare gzip
, 7z
e advdef
per ottenere il file più piccolo. Per usarlo per creare la più piccola esecuzione di file possibile:
tar c path/to/data | gz99 file.gz
L' advdef
utilità di AdvanceCOMP di solito fornisce il file più piccolo, ma è anche buggy (l' gz99
utilità verifica che non abbia corrotto il file prima di accettare l'output di advdef
). Per usarlo advdef
direttamente, crea file.tar.gz come preferisci. Quindi eseguire:
advdef -z -4 file.tar.gz
Questo creerà un file gz standard che può essere letto normalmente da gzip e tar, solo un po 'più piccolo. Questo è il meglio che puoi fare con il formato gz.
Dal momento che hai appreso solo di recente che tar può essere compresso e non hai detto perché volevi il file ".tar.gz" più piccolo, potresti non essere consapevole del fatto che con i file tar è possibile utilizzare formati più efficienti, come xz. In generale, il passaggio a un formato diverso può offrire un miglioramento notevolmente migliore della compressione rispetto al giocherellare con le opzioni gzip. Lo svantaggio principale di xz è che non è così comune come gzip, quindi le persone a cui invii il file potrebbero dover installare un nuovo pacchetto. Inoltre tende ad essere un po 'più lento, in particolare durante la compressione. Se questo non ti interessa, e vuoi davvero il più piccolo file tar, prova:
tar cv path/to/data | xz -9 > file.tar.xz
Le versioni moderne di tar, ad esempio su Ubuntu 13.10, rilevano automaticamente i file compressi. Quindi anche se usi la compressione xz puoi comunque decomprimere come al solito:
tar xvf file.tar.xz
Per dare una rapida idea di come si confrontano queste utilità di compressione, si consideri l'effetto di comprimere patch-3.1.1 dal kernel di Linux:
utility cpu format size(bytes)
gzip -9 0.02s gz 105,628
advdef -2 0.07s gz 102,619
7z -mx=9 -tgzip 0.42s gz 102,297
advdef -3 0.55s gz 102,290
advdef -4 0.75s gz 101,956
xz -9 0.03s xz 91,064
xz -3e 0.15s xz 90,996
In questo banale esempio, vediamo che per ottenere il minimo gz abbiamo bisogno di advdef (anche se 7z -tgzip è quasi altrettanto buono e molto meno buggy). Vediamo anche che il passaggio a xz ci guadagna molto più spazio rispetto al tentativo di spremere il massimo dal vecchio formato gz, senza che la compressione richieda troppo tempo.