2011-07-01 18:00:22 +0000 2011-07-01 18:00:22 +0000
149
149

Comment spécifier le niveau de compression lors de l'utilisation de tar -zcvf ?

Je gzip les annuaires très souvent au travail. Ce que je fais normalement est

tar -zcvf file.tar.gz /path/to/directory

Y a-t-il un moyen de spécifier le niveau de compression ici ? Je veux utiliser la meilleure compression possible, même si elle prend plus de temps.

Antwoorden (5)

69
69
69
2011-07-01 18:25:45 +0000

Au lieu d'utiliser le drapeau gzip pour tar, gzip les fichiers manuellement après le processus tar, puis vous pouvez spécifier le niveau de compression pour le 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 de la ligne de commande gzip indique à gzip d'utiliser le niveau de compression maximum possible (par défaut, -6).

Edit: Ligne de commande de pipe fixe basée sur le commentaire @depesz.

55
55
55
2012-12-19 03:03:43 +0000

Les versions modernes de tar supportent 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 d'avoir besoin du support xz.

tar -Jcvf file.tar.xz /path/to/directory

Je viens de découvrir here (en gros une copie de cette question, mais dans le stackexchange Unix) qu'il y a aussi une variable d'environnement XZ_OPT=-9 pour contrôler le niveau de compression XZ, similaire à celle de GZIP dans l'autre post.

XZ_OPT=-9 tar -Jcvf file.tar.xz /path/to/directory
34
34
34
2013-02-04 18:17:32 +0000
tar cv /path/to/directory | gzip --best > file.tar.gz

C'est la deuxième solution de Matrix Mole, mais légèrement raccourcie :

En appelant tar, l'option f indique que la sortie est un fichier. En le réglant sur - (stdout), tar écrit sa sortie sur stdout, ce qui est le comportement par défaut sans f et -.

Et comme indiqué dans la page de manuel gzip, si aucun fichier n'est spécifié, gzip comprimera à partir de l'entrée standard. Il n'y a pas besoin de - dans l'appel gzip.

L'option --best (équivalent à -9) définit le niveau de compression le plus élevé.

10
10
10
2016-06-21 04:21:54 +0000

Il est également possible de spécifier le programme de compression en utilisant -I. Cela peut inclure l'option du niveau de compression.

tar -I 'gzip -9' -cvf file.tar.gz /path/to/directory
3
3
3
2019-01-19 16:26:40 +0000

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
```.