Je gzip répertoires très souvent au travail. Ce que je fais normalement, c'est
tar -zcvf file.tar.gz /path/to/directory
Y at-il un moyen de spécifier le niveau de compression ici? Je souhaite utiliser la meilleure compression possible même si sa compression prend plus de temps.
GZIP=-9 tar cvzf file.tar.gz /path/to/directory
en supposant que vous utilisez bash. Généralement, définissez la variable d’environnement GZIP sur "-9" et exécutez tar normalement.
Aussi, si vous voulez vraiment la meilleure compression, n'utilisez pas gzip. Utilisez lzma ou 7z.
Et lorsque vous utilisez gzip (ce qui est une bonne idée pour diverses raisons), envisagez d'utiliser le programme pigz
et non le gzip
.
Au lieu d'utiliser l'indicateur gzip pour tar, gzip les fichiers manuellement après le processus tar, vous pouvez alors spécifier le niveau de compression du programme gzip:
tar -cvf files.tar /path/to/file0 /path/to/file1 ; gzip -9 files.tar
Ou vous pouvez utiliser:
tar cvf - /path/to/file0 /path/to/file1 | gzip -9 - > files.tar.gz
Le -9 dans la ligne de commande gzip indique à gzip d'utiliser le niveau de compression maximal possible (la valeur par défaut est -6).
Édition: Ligne de commande de canal fixe basée sur le commentaire @depesz.
Les versions modernes de tar prennent en charge le format d'archive xz (GNU tar, depuis 1.22 en 2009, Busybox depuis 1.17.0 en 2010).
Il est basé sur lzma2 , un peu comme une version de 7-Zip de gz . Cela donne une meilleure compression si vous êtes d'accord avec l'exigence de besoin du support de xz.
tar -Jcvf file.tar.xz /path/to/directory
Je viens de découvrir ici (essentiellement une dupe de cette question, mais dans le stackexchange Unix) qu'il existe aussi une variable d'environnement XZ_OPT = -9 pour contrôler le niveau de compression XZ similaire à celui de GZIP dans l'autre message.
XZ_OPT=-9 tar -Jcvf file.tar.xz /path/to/directory
tar cv /path/to/directory | gzip --best > file.tar.gz
C'est la deuxième solution de Matrix Mole, mais légèrement raccourcie:
Lors de l'appel de tar, l'option f
indique que la sortie est un fichier. Si vous le définissez sur -
(stdout), tar écrit sa sortie sur stdout, ce qui correspond au comportement par défaut sans f
et -
.
Et comme indiqué dans la page de manuel gzip
, si aucun fichier n'est spécifié, gzip sera compressé à partir de l'entrée standard. -
n'est pas nécessaire dans l'appel gzip
.
L'option --best
(équivalent à -9
) définit le niveau de compression le plus élevé.
Il est également possible de spécifier le programme de compression à l'aide de -I. Cela peut inclure l'option de niveau de compression.
tar -I 'gzip -9' -cvf file.tar.gz /path/to/directory
Et bien sûr, le goudron dérivé de macOS bsd doit être différent:
tar -czf file.tar.gz --options gzip:compression-level=9 /path/to/directory