Как указать уровень сжатия при использовании tar -zcvf?
Я очень часто гзип каталоги на работе. Что я обычно делаю
tar -zcvf file.tar.gz /path/to/directory
Есть ли способ указать уровень сжатия здесь? Я хочу использовать максимально возможное сжатие, даже если для его сжатия требуется больше времени.
6 ответов
GZIP=-9 tar cvzf file.tar.gz /path/to/directory
при условии, что вы используете Bash. Как правило, установите для переменной среды GZIP значение "-9" и обычно запускайте tar.
Кроме того - если вы действительно хотите лучшее сжатие, не используйте gzip. Используйте lzma или 7z.
И при использовании gzip (что в любом случае является хорошей идеей) рассмотрите возможность использования pigz
программа, а не gzip
,
Вместо использования флага 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.
Современные версии 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), что есть также переменная окружения XZ_OPT=-9 для управления уровнем сжатия XZ, аналогичным GZIP в другом посте.
XZ_OPT=-9 tar -Jcvf file.tar.xz /path/to/directory
tar cv /path/to/directory | gzip --best > file.tar.gz
Это второе решение Matrix Mole, но немного сокращенное:
При вызове tar опция f
заявляет, что вывод является файлом. Установка его в -
(stdout) заставляет tar записывать свои выходные данные в stdout, что является поведением по умолчанию без обоих f
а также -
,
И как указано gzip
Страница man, если файлы не указаны, gzip будет сжиматься из стандартного ввода. Там нет необходимости -
в gzip
вызов.
вариант --best
(эквивалентно -9
) устанавливает самый высокий уровень сжатия.
Существует также возможность указать программу сжатия, используя -I. Это может включать в себя параметр уровня сжатия.
tar -I 'gzip -9' -cvf file.tar.gz /path/to/directory
И, конечно же, tar-файл macOS bsd должен быть другим:
tar -czf file.tar.gz --options gzip:compression-level=9 /path/to/directory