En général, ni gzip ni tar ne peuvent créer "le plus petit fichier tar.gz". Il existe de nombreux utilitaires de compression pouvant compresser au format gz. J'ai écrit un script bash « gz99 » pour essayer gzip
, 7z
et advdef
pour obtenir le fichier le plus petit. Pour utiliser ceci afin de créer la plus petite exécution de fichier possible:
tar c path/to/data | gz99 file.gz
L' advdef
utilitaire de AdvanceCOMP donne généralement le plus petit fichier, mais est également bogué (l' gz99
utilitaire vérifie qu'il n'a pas corrompu le fichier avant d'accepter la sortie de advdef
). Pour l'utiliser advdef
directement, créez file.tar.gz comme bon vous semble. Puis lancez:
advdef -z -4 file.tar.gz
Cela créera un fichier gz standard qui peut être lu par gzip et tar normalement, mais un peu plus petit. C’est à peu près tout ce que vous pouvez faire avec le format gz.
Comme vous n’avez appris que récemment que tar peut compresser, sans indiquer pourquoi vous vouliez le plus petit fichier ".tar.gz", vous ignorez peut-être qu’il existe des formats plus efficaces pouvant être utilisés avec des fichiers tar, tels que xz. En règle générale, le passage à un format différent peut entraîner une bien meilleure amélioration de la compression que de jouer à tour de rôle avec les options gzip. Le principal inconvénient de xz est qu’il n’est pas aussi courant que gzip, il est donc possible que les personnes à qui vous envoyez le fichier doivent installer un nouveau paquet. Il a également tendance à être un peu plus lent, en particulier lors de la compression. Si cela ne vous concerne pas et que vous voulez vraiment le plus petit fichier tar, essayez:
tar cv path/to/data | xz -9 > file.tar.xz
Les versions modernes de tar, par exemple sous Ubuntu 13.10, détectent automatiquement les fichiers compressés. Donc, même si vous utilisez la compression xz, vous pouvez toujours décompresser comme d'habitude:
tar xvf file.tar.xz
Pour donner une idée rapide de la comparaison de ces utilitaires de compression, considérons l'effet de la compression du patch 3.1.1 à partir du noyau 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
Dans cet exemple trivial, nous voyons que pour obtenir le plus petit gz, il faut advdef (bien que 7z -tgzip soit presque aussi bon et beaucoup moins bogué). Nous voyons également que le passage à xz nous fait gagner beaucoup plus d’espace que d’essayer de tirer le meilleur parti de l’ancien format gz, sans que la compression prenne trop de temps.