Общий подход
Есть вариант для tar
программы:
-I, --use-compress-program PROG
filter through PROG (must accept -d)
Вы можете использовать многопоточную версию архиватора или утилиту сжатия.
Самые популярные многопоточные архиваторы - это pigz (вместо gzip) и pbzip2 (вместо bzip2). Например:
$ tar -I pbzip2 -cf OUTPUT_FILE.tar.bz2 paths_to_archive
$ tar --use-compress-program=pigz -cf OUTPUT_FILE.tar.gz paths_to_archive
Архиватор должен принять -d. Если ваша утилита замены не имеет этого параметра и / или вам нужно указать дополнительные параметры, используйте каналы (добавьте параметры при необходимости):
$ tar cf - paths_to_archive | pbzip2 > OUTPUT_FILE.tar.gz
$ tar cf - paths_to_archive | pigz > OUTPUT_FILE.tar.gz
Ввод и вывод однопоточных и многопоточных совместимы. Вы можете сжимать, используя многопоточную версию, и распаковывать, используя однопоточную версию, и наоборот.
p7zip
Для сжатия p7zip вам понадобится небольшой скрипт оболочки, подобный следующему:
#!/bin/sh
case $1 in
-d) 7za -txz -si -so e;;
*) 7za -txz -si -so a .;;
esac 2>/dev/null
Сохраните его как 7zhelper.sh. Вот пример использования:
$ tar -I 7zhelper.sh -cf OUTPUT_FILE.tar.7z paths_to_archive
$ tar -I 7zhelper.sh -xf OUTPUT_FILE.tar.7z
XZ
Что касается многопоточной поддержки XZ. Если вы используете версию 5.2.0 или выше XZ Utils, вы можете использовать несколько ядер для сжатия, установив -T
или --threads
установив соответствующее значение с помощью переменной среды XZ_DEFAULTS (например XZ_DEFAULTS="-T 0"
).
Это фрагмент man для версии 5.1.0alpha:
Многопоточное сжатие и распаковка еще не реализованы, поэтому этот параметр пока не действует.
Однако это не будет работать для распаковки файлов, которые также не были сжаты с включенной многопоточностью. От человека для версии 5.2.2:
Потоковая декомпрессия еще не была реализована. Он будет работать только с файлами, которые содержат несколько блоков с информацией о размере в заголовках блоков. Все файлы, сжатые в многопоточном режиме, соответствуют этому условию, но файлы, сжатые в однопоточном режиме, не работают, даже если используется --block-size = size.
Перекомпиляция с заменой
Если вы собираете tar из исходников, вы можете перекомпилировать с параметрами
--with-gzip=pigz
--with-bzip2=lbzip2
--with-lzip=plzip
После перекомпиляции tar с этими опциями вы можете проверить вывод справки tar:
$ tar --help | grep "lbzip2\|plzip\|pigz"
-j, --bzip2 filter the archive through lbzip2
--lzip filter the archive through plzip
-z, --gzip, --gunzip, --ungzip filter the archive through pigz