Si je comprends bien l'utilisation de tar + gzip, tar
est normalement utilisé pour consolider un groupe de fichiers dans un seul fichier, puis gzip
est utilisé pour compresser ce fichier.
J'ai récemment appris que tar
peut aussi compresser.
Comme je ne comprends pas tout à fait le fonctionnement de la compression, c’est (probablement ridicule) que l’envoi d’un fichier .tar pré-compressé à gzip empêche la compression de gzip aussi bien que son potentiel le permet, entre autres choses.
Ma question est essentiellement la suivante: quelle combinaison d'arguments/méthodes de compression dois-je utiliser pour créer le plus petit fichier tar.gz absolu, et à quoi ressemble l'instruction en ligne de commande?
Vous pouvez également indiquer à tar la compression maximale de l'utilisateur de la manière suivante:
export GZIP=-9
tar cvzf file.tar.gz /path/to/directory
De plus, pour que vos envvars ne soient pas encombrés, vous pouvez procéder comme suit:
env GZIP=-9 tar cvzf file.tar.gz /path/to/directory
Comme vous l'avez dit- "tar can peut aussi compresser", implique que - tar
ne _ pas {toujours compresser les données par lui-même.
Il ne le fait que lorsqu'il est utilisé avec l'option z
. Cela aussi, pas par lui-même, mais en transmettant les données tarées à travers gzip.
Toutefois, comme indiqué dans this answer, vous pouvez diriger les deux commandes: tar
& gzip
de sorte que vous puissiez spécifier explicitement le niveau de compression de la commande gzip
afin d'obtenir la plus petite taille de sortie.
tar cvf -/chemin/vers/répertoire | gzip -9 -> fichier.tar.gz
Ici, 9
spécifie le niveau de compression maximal possible.
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 plus petit fichier. Pour utiliser ceci afin de créer la plus petite exécution de fichier possible:
tar c path/to/data | gz99 file.gz
L'utilitaire advdef
de AdvanceCOMP donne généralement le plus petit fichier, mais 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 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 ce que vous pouvez faire de mieux avec le format gz.
Comme vous n’avez appris que récemment que tar peut être compressé, et n’avez pas expliqué 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 vous 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 constatons é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.
tar c /path/to/data | gzip --best > file.tar.gz
gzip
L'option --best
(équivalente à -9
) demande le niveau de compression le plus élevé.