En général, ni gzip ni tar ne peuvent créer "le plus petit tar.gz absolu". Il existe de nombreux utilitaires de compression qui peuvent compresser au format gz. J'ai écrit un bash script " gz99 " pour essayer gzip
, 7z
y advdef
pour obtenir le plus petit fichier. Pour utiliser ceci afin de créer le plus petit fichier possible, exécutez :
tar c path/to/data | gz99 file.gz
El advdef
d'AdvanceCOMP donne généralement le fichier le plus petit, mais il est aussi bogué (l'utilitaire gz99
vérifie qu'il n'a pas corrompu le fichier avant d'accepter la sortie de l'utilitaire advdef
). Pour utiliser advdef
directement, créez fichier.tar.gz comme vous le souhaitez. Puis lancez :
advdef -z -4 file.tar.gz
Cela créera un fichier gz standard qui peut être lu par gzip et tar comme d'habitude, juste un peu plus petit. C'est à peu près le mieux que vous puissiez faire avec le format gz.
Comme vous n'avez appris que récemment que tar peut compresser, et que vous n'avez pas dit pourquoi vous vouliez le plus petit fichier ".tar.gz", vous ne savez peut-être pas qu'il existe des formats plus efficaces pour les fichiers tar, comme xz. En général, le passage à un format différent peut donner une bien meilleure amélioration de la compression que de jouer avec les options de gzip. Le principal inconvénient de xz est qu'il n'est pas aussi courant que gzip, de sorte que les personnes à qui vous envoyez le fichier devront peut-être installer un nouveau paquet. Il a également tendance à être un peu plus lent, en particulier lors de la compression. Si cela n'a pas d'importance pour vous, 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 sur Ubuntu 13.10, détectent automatiquement les fichiers compressés. Ainsi, 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 façon dont ces utilitaires de compression se comparent, considérez l'effet de la compression du patch-3.1.1 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 nous avons besoin de advdef (bien que 7z -tgzip soit presque aussi bon et beaucoup moins bogué). Nous voyons aussi que passer à xz nous fait gagner beaucoup plus d'espace que d'essayer de tirer le maximum de l'ancien format gz, sans que la compression prenne trop de temps.