Загальний підхід
Є можливість для 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. Якщо ви працюєте з версією XZ Utils версії 5.2.0 або вище, ви можете використовувати кілька ядер для стиснення, встановивши -T
або --threads
до відповідного значення за допомогою змінної середовища XZ_DEFAULTS (наприклад XZ_DEFAULTS="-T 0"
).
Це фрагмент людини для версії 5.1.0 alpha:
Багатопотокове стиснення та декомпресія ще не реалізовані, тому ця можливість наразі не має ефекту.
Однак це не допоможе для декомпресії файлів, які також не були стиснуті з увімкненою нарізкою. Від людини до версії 5.2.2:
Декомпресія нитки ще не здійснена. Він буде працювати лише над файлами, які містять кілька блоків з інформацією про розмір у заголовках блоків. Усі файли, стиснуті в багатопотоковому режимі, відповідають цій умові, але файли, стиснуті в однопотоковому режимі, навіть не використовуються --block-size = size.
Перекомпіляція із заміною
Якщо ви будуєте дьоготь з джерел, тоді ви можете перекомпілювати параметри
--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