2012-12-01 20:47:48 +0000 2012-12-01 20:47:48 +0000
67
67

Comment obtenir une compression maximale avec .tar.gz ?

La façon dont je comprends l'utilisation de tar + gzip est que tar est normalement utilisé pour consolider un regroupement de fichiers en un seul fichier, puis gzip est utilisé pour compresser ce fichier.

J'ai récemment appris que tar peut également compresser.

Comme je ne comprends pas bien comment fonctionne la compression @ son coeur, je crains (peut-être ridicule) que l'envoi d'un .tar pré-compressé à gzip puisse empêcher gzip de compresser aussi bien que son potentiel le permettrait et des choses de cette nature.

Ma question est essentiellement : Quelle combinaison de méthodes args/compression dois-je utiliser pour créer le plus petit tar.gz absolu, et à quoi ressemble l'instruction de ligne de commande pour cela ?

Réponses (4)

118
118
118
2013-01-31 18:55:22 +0000

Vous pouvez également indiquer à l'utilisateur la compression maximale du goudron de la manière suivante :

export GZIP=-9
tar cvzf file.tar.gz /path/to/directory

De plus, pour éviter d'encombrer vos envvars, vous pouvez faire ceci :

env GZIP=-9 tar cvzf file.tar.gz /path/to/directory
44
44
44
2012-12-02 03:37:18 +0000

Comme vous l'avez dit - “tar peut aussi compresser”, implique que - tar ne toujours pas compresser les données par lui-même.

Il ne le fait que lorsqu'il est utilisé avec l'option z. Cela non plus, mais en faisant passer les données goudronnées par gzip.

Cependant, comme indiqué dans la réponse this , vous pouvez utiliser les deux commandes : tar & gzip de sorte que vous puissiez spécifier explicitement le niveau de compression de la commande gzip pour obtenir la plus petite taille de sortie.

tar cvf - /path/to/directory | gzip -9 - > file.tar.gz

Ici 9 spécifie le niveau de compression maximum possible.

17
17
17
2014-03-10 15:23:08 +0000

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.

6
6
6
2014-02-06 18:25:54 +0000
tar c /path/to/data | gzip --best > file.tar.gz

gzip l'option --best (équivalent à -9) demande le niveau de compression le plus élevé.