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

Wie kann man den Grad der Komprimierung bei der Verwendung von tar -zcvf angeben?

Ich gzip Verzeichnisse sehr oft bei der Arbeit. Was ich normalerweise mache, ist

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

Gibt es eine Möglichkeit, die Komprimierungsstufe hier anzugeben? Ich möchte die bestmögliche Komprimierung verwenden, auch wenn sie mehr Zeit zum Komprimieren benötigt.

Antwoorden (5)

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

Anstatt das gzip-Flag für tar zu verwenden, gzipen Sie die Dateien manuell nach dem tar-Prozess, dann können Sie die Komprimierungsstufe für das gzip-Programm angeben:

tar -cvf files.tar /path/to/file0 /path/to/file1 ; gzip -9 files.tar

Oder Sie könnten verwenden:

tar cvf - /path/to/file0 /path/to/file1 | gzip -9 - > files.tar.gz

Die -9 in der gzip-Befehlszeile weist gzip an, die maximal mögliche Kompressionsstufe zu verwenden (Standard ist -6).

Bearbeitung: Die Pipe-Befehlszeile wurde aufgrund des Kommentars von @depesz korrigiert.

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

Moderne Versionen von tar unterstützen das xz-Archivformat (GNU tar, seit 1.22 im Jahr 2009, Busybox seit 1.17.0 im Jahr 2010).

Es basiert auf lzma2 , so etwas wie eine 7-Zip Version von gz . Dies bietet eine bessere Komprimierung, wenn Sie mit der Anforderung, xz-Unterstützung zu benötigen, einverstanden sind.

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

Ich habe gerade hier (im Grunde ein Duplikat dieser Frage, aber im Unix-Stackexchange) herausgefunden, dass es auch eine XZ_OPT=-9-Umgebungsvariable gibt, um die XZ-Komprimierungsstufe zu steuern, ähnlich wie die GZIP-Variable im anderen Beitrag.

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

Dies ist die zweite Lösung von Matrix Mole, jedoch leicht gekürzt:

Beim Aufruf von tar gibt die Option f an, dass die Ausgabe eine Datei ist. Das Setzen auf - (stdout) bewirkt, dass tar seine Ausgabe nach stdout schreibt, was das Standardverhalten ohne f und - ist.

Und wie in der gzip-Manualseite angegeben, komprimiert gzip von der Standardeingabe, wenn keine Dateien angegeben sind. Es besteht keine Notwendigkeit für - im gzip-Aufruf.

Die Option --best (äquivalent zu -9) setzt die höchste Kompressionsstufe.

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

Es gibt auch die Möglichkeit, das Komprimierungsprogramm mit -I anzugeben. Dies kann die Option für die Komprimierungsstufe beinhalten.

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

Und natürlich muss macOS bsd-abgeleitetes tar anders sein:

tar -czf file.tar.gz --options gzip:compression-level=9 /path/to/directory