Поэтому мне нужно сжать каталог с максимальным сжатием.
Как я могу это сделать xz
? Я имею в виду, что мне тоже понадобится, tar
потому что я не могу сжать каталог только xz
. Есть ли oneliner для производства, например foo.tar.xz
?
directory
tar
compression
LanceBaynes
источник
источник
man 1 xz
говоритit's not a good idea to blindly use -9 for everything like it often is with gzip(1) and bzip2(1).
-7 ... -9 [...] These are useful only when compressing files bigger than 8 MiB, 16 MiB, and 32 MiB, respectively.
RTFM для получения дополнительной информации.Ответы:
При условии
xz
соблюдения стандартного набора флагов командной строки, включая флаги уровня сжатия, вы можете попробовать:источник
-9e
лучший уровень, но это займет очень много времени-9e
не всегда даст вам лучший результат - см. пункт 8 здесь rootusers.com/13-simple-xz-examples--threads=0
в xzС недавним GNU
tar
на bash или производной оболочке:Переключатель j в нижнем регистре tar использует bzip, переключатель J в верхнем регистре использует xz.
XZ_OPT
Переменная среды позволяет установитьxz
параметры , которые не могут быть переданы с помощью призывающих приложений , таких какtar
.Это сейчас максимально .
Смотрите
man xz
другие опции, которые вы можете установить (-e
/--extreme
может дать вам дополнительное преимущество сжатия для некоторых наборов данных).источник
rc
иakanga
.fish
,csh
,tcsh
Иes
быть основные снаряды , которые не поддерживают его. Там вы бы использовалиenv
команду.-9
и-e
xz, вы хотите,XZ_OPT=-e9
но, как указал @krzyk, -e очень медленноXZ_OPT
это не функция, реализованная вtar
. Это особенностьxz
. Когдаtar
вызовыxz
, окр-переменная просто передается.даже лучше чем
источник
option -e, --extreme
Измените предустановку сжатия (-0 ... -9) так, чтобы можно было добиться чуть лучшей степени сжатия без увеличения использования памяти компрессором или декомпрессором (исключение: использование памяти компрессора может немного увеличиться с предустановками -0 ... -2). Недостатком является то, что время сжатия резко возрастет (оно может легко удвоиться).-9
не-9e
, да?XZ_OPT="-9e -T0" tar -cJf ...
Если у вас 16 ГБ ОЗУ (и больше ничего не работает), вы можете попробовать:
Для декомпрессии потребуется 1,5 ГиБ, а для сжатия - примерно в 11 раз. Отрегулируйте соответственно для меньшего количества памяти.
Это поможет только если данные на самом деле , что большой, и в любом случае это не поможет , ЧТО много, но все - таки ...
Если вы сжимаете двоичные файлы, добавьте --x86 в качестве первого параметра xz. Если вы играете с «мультимедийными» файлами (несжатый звук или растровые изображения), вы можете попробовать --delta = dist = 2 (поэкспериментируйте со значением, хорошие значения - 1..4).
Если вы чувствуете себя очень предприимчивым, вы можете попробовать поиграть с большим количеством опций LZMA, таких как
(это настройки по умолчанию, вы можете попробовать значения от 0 до 4, а lc + lp не должен превышать 4)
Чтобы увидеть, как предустановки по умолчанию соответствуют этим значениям, вы можете проверить исходный файл src / liblzma / lzma / lzma_encoder_presets.c. Ничего особенного там нет (-e устанавливает красивую длину на 273, а также регулирует глубину).
источник
Вы можете попробовать разные варианты, у меня -4е работает лучше
Я проверил, запустив:
Так что, похоже, опция -4e работает немного лучше, чем -9e.
источник
no difference = 660 4e better than 9e = 74 9e better than 4e = 17 total files = 751 tar 2 html 2 csv 2 xml 2 gz 2 ppt 2 eps 2 docx 2 gif 2 rpm 3 png 3 asv 3 xlsx 3 exe 3 rar 4 nc 4 txt 5 odt 6 xls 7 zip 7 doc 9 m 12 dat 17 other 109 pdf 133 135 jpg 270
txt 109 txt/pdf 135
tar
использовании файловxz
.tar --help
:-I, --use-compress-program=PROG
также сжимать с помощью внешних компрессоров:
распаковать внешние компрессоры:
Архив списка внешних компрессоров:
источник
-I
добавление объяснения опции .tar
Команда используетJ
флаг для файлов XZ. Пример:tar -cJvf foo.tar.xz foo/
источник
J
уже упоминалось в ответе БодингаДля тех, кто заинтересован,
-e9
на 0,4% меньше, на 20% медленнее при сжатии, на 3% медленнее при декомпрессии по сравнению с-9
обычным ноутбуком. Вот время запуска в структуре каталогов исходного кода Python.Сжатие:
Декомпрессия:
Размер файла:
источник
Это не точный ответ на ваш вопрос, но вы можете использовать одну команду вместо двух:
добавляет все файлы из каталога "dir1" в архив archive.7z, используя "ultras ettings"
другие поддерживаемые форматы: zip, gzip, bzip2 или tar. для этого просто замени
7z
после-t
.--источник
man 7z
ПРИМЕЧАНИЕ: не используйте эту команду для резервного копирования системных файлов, кроме личных файлов, потому что формат 7z не хранит разрешения файловой системы .
источник
На многоядерном компьютере с версией v5.2.0 xz-utils проверьте:
Если вы хотите использовать максимальное количество ядер и максимальное сжатие:
Или установите -T на количество ядер, которые вы хотите использовать.
Затем:
Также это может быть полезно для выбора уровня сжатия:
https://catchchallenger.first-world.info/wiki/Quick_Benchmark:_Gzip_vs_Bzip2_vs_LZMA_vs_XZ_vs_LZ4_vs_LZO
источник
Если вы хотите, чтобы это выполнялось быстрее, с использованием нескольких потоков, но без замедления работы вашей системы во время выполнения другой работы, попробуйте добавить,
-Tn
где n - это количество потоков, которые вы хотите использовать, а такжеnice
снизить степень сжатия до приоритета простоя.Модель (на 4 темы):
Попробуйте посмотреть
top
илиhtop
когда вы делаете это в большом каталоге (несколько ГБ). Надеемся, что вы увидите несколькоxz
потоков со значением Nice 19 (самый низкий приоритет).Я также сократил это до краткости и осмысленности, например:
-f -
в других ответах просто нет необходимости, поскольку поtar
умолчанию выводом является stdout.Вы также можете
nice
обрабатывать tar, но я никогда не считал это необходимым, так какxz
всегда узкие места в CPU для конвейера.Практическое замечание, я редко использую
xz -9
для чего-либо, не столько из-за процессора или времени, но из-за высоких требований к памяти. Посмотрите на https://catchchallenger.first-world.info/wiki/Quick_Benchmark:_Gzip_vs_Bzip2_vs_LZMA_vs_XZ_vs_LZ4_vs_LZO#Memory_requirements_on_compression .xz
Компрессора, какbzip2
, но , в отличиеgzip
, использует больше памяти для более высоких коэффициентов сжатия. Вместе с тем, что онxz
использует гораздо больше памяти, чем любой другой компрессор, вы можете легко использовать более 600 МБ памяти. А если вы используете-T
многопоточное сжатие, требования к памяти возрастают еще больше. Просто что-то, о чем нужно знать, например, если вы работаете с небольшим сервисом на маленькой виртуальной машине с 1-2 ГБ памяти, вы можете непреднамеренно оказать влияние.источник
В Mac OS X альтернативный подход к передаче параметра с
tar
помощью использования--options=
флага. Например,источник