У меня есть сотни похожих больших файлов (30 мегабайт каждый), которые я хочу сжать. Каждая пара файлов содержит 99% одинаковых данных (разница менее 1%), поэтому я ожидаю, что у меня будет архив не более 40-50 мегабайт.
Один файл может быть сжат от 30 МБ до 13-15 МБ (с xz -1
, gz -1
, bzip2 -1
), но при сжатии двух или более файлов я хочу иметь архив размером 13-15MB + N*0.3MB
где N - количество файлов.
При использовании tar
(для создания сплошного архива) и xz -6
(для определения словаря сжатия больше одного файла - Обновить - этого было недостаточно!), У меня все еще остается архив с размером N*13MB
.
Я думаю, что и gzip
и bzip2
мне не помогут, потому что у них словарь меньше 1 МБ, а мой поток tar повторяется каждые 30 МБ.
Как мне заархивировать мою проблему в современном Linux, используя стандартные инструменты?
Можно ли настроить xz
для быстрого сжатия, но использовать словарь размером более 30-60 МБ?
Обновление: сделал трюк с tar c input_directory | xz --lzma2=dict=128M,mode=fast,mf=hc4 --memory=2G > compressed.tar.xz
. Не уверен в необходимости параметров mf=hc4
и --memory=2G
; но dict=128M
устанавливает словарь достаточно большим (больше, чем один файл), а mode=fast
делает процесс немного быстрее, чем -e
.