Habituellement, ni gzip ni goudron ne peuvent créer “le plus petit tar.gz”. Il existe de nombreux utilitaires de compression qui peuvent compresser au format gz. J'ai écrit un script bash gz99 “ pour essayer gzip
, 7z
et advdef
pour obtenir le plus petit fichier. Pour l'utiliser et créer le plus petit fichier possible, exécutez :
tar c path/to/data | gz99 file.gz
L'utilitaire advdef
de AdvanceCOMP donne généralement le plus petit fichier, mais il est également bogué (l'utilitaire gz99
vérifie qu'il n'a pas corrompu le fichier avant d'accepter la sortie de advdef
). Pour utiliser advdef
directement, créez le fichier .tar.gz comme bon vous semble. Ensuite, 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 le tar peut se 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 qui peuvent être utilisés avec les fichiers tar, comme xz. En général, passer à un autre format peut donner une bien meilleure amélioration de la compression que de jouer avec les options gzip. Le principal inconvénient de xz est qu'il n'est pas aussi courant que gzip, de sorte que les personnes auxquelles vous envoyez le fichier peuvent devoir installer un nouveau paquet. Il a également tendance à être un peu plus lent, en particulier lors de la compression. Si cela ne vous importe 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 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 manière 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 buggé). Nous voyons également que le passage au format xz nous fait gagner beaucoup plus d'espace qu'en essayant de tirer le meilleur parti de l'ancien format gz, sans que la compression ne prenne trop de temps.