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

Jak określić poziom kompresji przy użyciu tar -zcvf?

W pracy bardzo często gzipuję katalogi. To co zwykle robię to

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

Czy istnieje sposób na określenie poziomu kompresji tutaj? Chcę użyć najlepszej możliwej kompresji, nawet jeśli zajmuje to więcej czasu.

Odpowiedzi (5)

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

Zamiast używać flagi gzip dla tar, gzipuj pliki ręcznie po procesie tar, a następnie możesz określić poziom kompresji dla programu gzip:

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

Albo możesz użyć:

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

The -9 in the gzip command line tells gzip to use the maximum possible compression level (default is -6).

Edit: Poprawiono linię poleceń pipe na podstawie komentarza @depesz.

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

Współczesne wersje programu tar obsługują format archiwum xz (GNU tar, od 1.22 w 2009, Busybox od 1.17.0 w 2010).

Jest on oparty na lzma2 , coś jak 7-Zip wersja gz . Daje to lepszą kompresję, jeżeli nie przeszkadza ci wymóg obsługi xz.

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

Właśnie dowiedziałem się tutaj (w zasadzie duplikat tego pytania, ale w Unix stackexchange), że istnieje również zmienna środowiskowa XZ_OPT=-9 do kontrolowania poziomu kompresji XZ podobna do tej z GZIP w innym poście.

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

Jest to drugie rozwiązanie Matrix Mole'a, ale nieco skrócone:

Przy wywołaniu tar'a opcja f określa, że wyjściem ma być plik. Ustawienie jej na - (stdout) powoduje, że tar będzie zapisywał swoje dane wyjściowe na stdout, co jest domyślnym zachowaniem bez f i -.

I jak podaje man page gzip, jeśli nie podano plików, gzip będzie kompresował ze standardowego wejścia. Nie ma potrzeby używania - w wywołaniu gzip.

Opcja --best (odpowiednik -9) ustawia najwyższy poziom kompresji.

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

Istnieje również możliwość określenia programu kompresującego przy użyciu opcji -I. Może to zawierać opcję poziomu kompresji.

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

I oczywiście tar pochodzący z macOS bsd musi być inny:

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