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

Как указать уровень сжатия при использовании tar -zcvf?

Я очень часто на работе работаю с каталогами gzip. Что я обычно делаю, так это

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

Есть ли способ указать уровень сжатия? Я хочу использовать наилучшее сжатие, даже если оно занимает больше времени.

Ответы (5)

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

Вместо того, чтобы использовать gzip-флаг для tar, gzip-файлы вручную после tar-процесса, вы можете указать уровень сжатия для gzip-программы:

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

Или вы можете использовать:

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

Командная строка -9 в gzip говорит gzip использовать максимально возможный уровень сжатия (по умолчанию -6).

Правка: Исправлена командная строка на основе комментария @depesz.

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

Современные версии tar поддерживают формат архива xz (GNU tar, с 1.22 в 2009, Busybox с 1.17.0 в 2010).

Он основан на lzma2 , что-то вроде 7-Zip версии gz . Это дает лучшее сжатие, если вы не против требования поддержки xz.

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

Я только что узнал здесь (в основном дубликат этого вопроса, но в Unix stackexchange), что есть также переменная окружения XZ_OPT=-9 для управления уровнем сжатия XZ, аналогичная GZIP в другой заметке.

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

Это второе решение Matrix Mole, но немного укороченное:

При вызове tar опция f заявляет, что выходной файл. Установка в - (stdout) заставляет tar записывать свой вывод в stdout, что является поведением по умолчанию без f и -.

И как указано в man-странице gzip, если ни один из файлов не указан, то gzip будет сжиматься со стандартного входа. Нет необходимости в - при вызове gzip. Вариант

(эквивалент --best) устанавливает наивысший уровень сжатия.

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

Также существует возможность указать программу сжатия с помощью -I. Это может включать опцию уровня сжатия.

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

И, конечно же, macOS bsd должен быть разным:

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

Похожие вопросы

6
10
5
37
13