Di solito né gzip né tar possono creare “il più piccolo tar.gz in assoluto”. Ci sono molte utility di compressione che possono comprimere nel formato gz. Ho scritto uno script bash gz99 “ per provare gzip
, 7z
e advdef
per ottenere il file più piccolo. Per usarlo per creare il più piccolo file possibile esegui:
tar c path/to/data | gz99 file.gz
L'utilità advdef
di AdvanceCOMP di solito dà il file più piccolo, ma è anche difettosa (l'utilità gz99
controlla di non aver corrotto il file prima di accettare l'output di advdef
). Per usare direttamente advdef
, crea file.tar.gz come preferisci. Poi esegui:
advdef -z -4 file.tar.gz
Questo creerà un file gz standard che può essere letto da gzip e tar normalmente, solo un po’ più piccolo. Questo è il meglio che si può fare con il formato gz.
Dato che hai imparato solo recentemente che tar può comprimere, e non hai detto perché volevi il più piccolo file ”.tar.gz", potresti non sapere che ci sono formati più efficienti che possono essere usati con i file tar, come xz. Generalmente, passare a un formato diverso può dare un miglioramento di gran lunga migliore nella compressione che armeggiare con le opzioni gzip. Lo svantaggio principale di xz è che non è così comune come gzip, quindi le persone a cui si invia il file potrebbero dover installare un nuovo pacchetto. Tende anche ad essere un po’ più lento, in particolare durante la compressione. Se questo non vi interessa, e volete davvero il file tar più piccolo, provate:
tar cv path/to/data | xz -9 > file.tar.xz
Le versioni moderne di tar, per 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 queste utility di compressione si confrontino, considera l'effetto della compressione di patch-3.1.1 del kernel 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 più piccolo gz abbiamo bisogno di advdef (sebbene 7z -tgzip sia quasi altrettanto buono e molto meno buggato). Vediamo anche che passare a xz ci fa guadagnare molto più spazio che cercare di spremere il massimo dal vecchio formato gz, senza che la compressione richieda troppo tempo.