Réponses:
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 un pigz
programme et non le gzip
.
GZIP_OPT
, l'utilisation devrait être la même.
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).
Edit: Correction de la ligne de commande du pipe basée sur le commentaire @depesz.
tar cvf - /path/to/directory | gzip -9 - > file.tar.gz
file.tar
, puisque gzip
ajoute l'extension ".gz".
f -
? s'il n'y a pas de fichier, alors c'est stdin / out
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 7-Zip de gz . Cela donne une meilleure compression si vous êtes d'accord avec l'exigence de besoin du support 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 également 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, qui est le comportement par défaut sans les deux f
et -
.
Et comme indiqué dans la gzip
page de manuel, si aucun fichier n'est spécifié, gzip sera compressé à partir de l'entrée standard. Il n'y a pas besoin de -
dans l' gzip
appel.
Option --best
(équivalent à -9
) définit le niveau de compression le plus élevé.
xz
et pixz
aussi. C'est un excellent moyen de contrôler le nombre de threads utilisés pour la compression parallèle sans avoir à créer un fichier .tar intermédiaire. Comme sitar -cv /path/to/dir | pixz -p4 > output.tpxz
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
-I
argument. Elles essaieront de traiter l'ensemble du projet comme un nom de programme à exécuter, et échoueront donc. Au moins à partir de la version 1.29 de Debian Stretch, cela fonctionne.
top
et voir en utilisant n'importe où entre 200% -400 $ CPU.