Какие варианты лучше всего использовать при сжатии файлов с использованием 7 Zip?

62

Мне часто приходится собирать файлы журналов и загружать их на центральный сервер (принадлежит другой компании). Центральный сервер имеет ограничение на размер файла, поэтому я пытаюсь создать наименьший возможный файл в формате zip.

Какие настройки лучше всего использовать при сжатии текстового файла в формат zip, когда мне нужен только маленький размер файла?

Варианты 7zip

Я сделал очевидное и выбрал ультра-сжатие, и я заметил, что LZMA работает лучше, чем выкачивание, но у меня слишком много других вариантов, чтобы я мог протестировать их все.

jjnguy
источник
1
Можно ли разделить почтовый индекс на несколько файлов?
JaredMcAteer
3
Как только вы выбираете что-нибудь, кроме Deflateформата, это уже не «нормальный» .zip-файл, а «расширенный» zip-файл, впервые разработанный WinZip. Изначально они сохраняли расширение как .zip, к большому ужасу (поскольку большинство обычных инструментов обработки zip не могут с ними справиться), но большинство архиваторов сейчас используют .zipx, чтобы отличать их от традиционных файлов .zip. Если вы можете использовать LZMA, переключитесь на .7z и выберите PPMd - он должен сжиматься лучше (и быстрее!) Для текстовых файлов.
afrazier
1
@afrazier: "Спецификация формата файла .ZIP документирует следующие методы сжатия: сохраненный (без сжатия), сжатый, уменьшенный (методы 1-4), имплозированный, токенизация, дефлированный, Deflate64, bzip2, LZMA (EFS), WavPack, PPMd «. en.wikipedia.org/wiki/Zip_%28file_format%29#Compression_methods
эндолит
1
@endolith: bzip2, lzma, wv и ppmd - очень недавние дополнения к формату файлов. Даже не безопасно предполагать, что ваш получатель может обрабатывать deflate64, а тем более что-либо более новое.
afrazier
1
определить "нормальные инструменты почтового индекса". В настоящее время большинство «обычных zip-инструментов», таких как 7z и winrar, могут извлекать файлы 7z.
phuclv

Ответы:

61

Чтобы создать наименьший стандартный ZIP-файл, который может создать 7-Zip, попробуйте:

7z a -mm=Deflate -mfb=258 -mpass=15 -r foo.zip C:\Path\To\Files\*

Источник: Как я могу добиться лучшего, стандартного сжатия ZIP?

В противном случае, если вас не интересует стандарт ZIP, используйте следующие ультра-настройки:

7z a -t7z -m0=lzma -mx=9 -mfb=64 -md=32m -ms=on archive.7z dir1

Которые:

-t7z   7z archive

-m0=lzma
       lzma method

-mx=9  level of compression = 9 (Ultra)

-mfb=64
       number of fast bytes for LZMA = 64
-md=32m
       dictionary size = 32 megabytes

-ms=on solid archive = on
kenorb
источник
2
@Tek: почему? Это не очень хорошо. Вопрос был об использовании «стандартного формата ZIP», поэтому в ответе не следует указывать LZMA. -ms = on для .7z, а не для стандартных zip-файлов. -md связан с BZip2, поэтому я не ожидаю, что он повлияет на ZIP (или даже LZMA). -mfb = 64 - неоптимизированное значение: -mfb = 258 создает меньшие zip-файлы. И в этом ответе даже не упоминается -mpass = 15, что может повлиять на zip-файлы. Это хорошо отформатированный ответ, который, к сожалению, неверен во многих отношениях.
ТООГАМ
6
Я бы использовал lzma2
Lance Badger
Если вы посмотрите на часто задаваемые вопросы по 7-zip, в нем говорится, что новые версии 7z могут иметь худшую производительность, чем старые версии в некоторых обстоятельствах. Прочитайте FAQ для более подробной информации, но вкратце используйте «qs» в поле «Параметры» в графическом интерфейсе или используйте -mqs в версии командной строки, чтобы использовать старый метод сортировки по расширению файла. 7-zip.org/faq.html .
Дройф
13

Если вы можете использовать формат .7z, а не просто .zip, я бы просто использовал PPMD со следующими параметрами и оставил бы все остальное, как установлено уровнем сжатия:

  • Формат архива: 7z
  • Метод сжатия: PPMD
  • Уровень компрессии: Ультра

Я регулярно сжимаю серверные / текстовые журналы (60 МБ +), используя эти опции, и они обычно выходят на 1-2% от исходного размера.

Умбер Ферруле
источник
Для текста, такого как файлы журнала, ppmd определенно подходит. Тем не менее, в вопросе упоминалось, что он должен оставаться в формате zip, который может не работать с PPMD.
Брайан Минтон
Только что попробовал zip с PPMD, и Windows Explorer открывает содержимое без жалоб здесь на Windows 7
Umber Ferrule
3
Я тоже это заметил. Он открывает содержимое просто отлично. Однако, когда я действительно попытался просмотреть один из файлов внутри zip-файла, это не удалось.
Брайан Минтон
2
Почему PPMD ​​лучший метод сжатия для текстовых файлов?
user598527
1
LZMA2 дает лучшие результаты для текстовых файлов, чем PPMD.
T3rm1
7

Я сравниваю для db.fdb 1,2 ГБ (1236598784 B) на сервере Ubuntu 14.04.03 с p7zip [64] 9.20 на ВМ:

1. 7z a -mx=9 1.7z db.fdb
2. 7z a -t7z -m0=lzma -mx=9 -mfb=64 -md=32m -ms=on 2.7z db.fdb
3. 7z a -t7z -m0=lzma -mx=9 -mfb=258 -md=32m -ms=on 3.7z db.fdb
4. 7z a -t7z -m0=lzma -mx=9 -mfb=258 -md=32m -ms=on -pass=15 4.7z db.fdb
5. 7z a -mx=9 -mmt=on 5.7z db.fdb
6. 7z a -t7z -m0=lzma -mx=9 -mfb=258 -md=32m -ms=on -mmt=on 6.7z db.fdb

и получить такие результаты:

1.7z 96 MB (100108731 B) with 6' 25"
2.7z 95 MB ( 99520375 B) with 5' 18"
3.7z 93 MB ( 97512311 B) with 9' 19"
4.7z 93 MB ( 97512345 B) with 9' 40"
5.7z 96 MB (100108731 B) with 5' 26"
6.7z 93 MB ( 97512311 B) with 9' 09"

Я думаю, что второй метод работает нормально = (почти) лучший компресс с лучшим временем. Но для лучшего «просмотра» и легкости запоминания это первый метод - с небольшими файлами и без точки максимального сжатия. Между 2 и 3 методами мы не получаем 7z меньше, но тратим на сжатие почти вдвое больше времени. Каждый решит со своим.

Сулима
источник
7

После долгих экспериментов, изучения подробной документации 7zip и прочтения части исходного кода 7z, касающегося расширенных параметров LZMA2, ниже представлен лучший способ. Он сократил некоторые тестовые файлы на 1 ГБ более чем в 2-4 раза по сравнению с ранее принятыми решениями, размещенными здесь или даже на странице 7z.

7z a -t7z -mx=9 -mfb=273 -ms -md=31 -myx=9 -mtm=- -mmt -mmtf -md=1536m -mmf=bt3 -mmc=10000 -mpb=0 -mlc=0 archive.7z inputfileordir

Здесь предполагается сжатие LZMA2, но вы можете добиться еще большей производительности в 7zip, передав расширенные параметры LZMA2, такие как -m0=LZMA2:27, или -m0=LZMA2:d25, или массив параметров, таких как

-m0=BCJ2 -m1=LZMA:d25 -m2=LZMA:d19 -m3=LZMA:d19 -mb0:1

Похоже, что такие параметры не были соблюдены в 7z-версиях, которые я тестировал, но вы, возможно, захотите изучить их дальше или исправить код 7z, чтобы правильно их проанализировать. Или, возможно, он должен работать и просто не работает в тестируемых сборках.

91735472
источник
вау, это имело действительно большое значение. Для своего архива я экспериментировал со многими другими предложениями, включая другие ответы здесь, и лучший результат, который я получил, был 99 МБ против 85 МБ с этими настройками.
user9399
0

Установите в поле «split to volume, bytes» максимально допустимый размер файла сервера (я думаю, в байтах, хотя он принимает общие сокращения, такие как «КБ» и «МБ»). Если размер zip-файла превышает этот размер, 7-zip автоматически разделит его на несколько файлов, таких как integra_serviceLog.zip.001 , gration_serviceLog.zip.002 и т. Д. дискеты.) Для распаковки вам понадобятся все файлы. Используйте это вместо того, чтобы беспокоиться об абсолютных наилучших настройках сжатия, которые нужно использовать для любого конкретного набора файлов, потому что то, что лучше для одного файла, может отличаться для другого файла, и вам не нужно проходить это каждый раз, когда вам нужно копировать логи.

Роб Кеннеди
источник
1
Я беспокоюсь о том, как люди на другой стороне распакуют файлы. Мне нужно, чтобы это было как можно проще для них. Знаете ли вы, если вы можете разархивировать разделенные тома, используя встроенный в Windows zip или gzip?
jjnguy
По-видимому, нет, встроенная функция zip-папок Windows не поддерживает составные zip-файлы. Это очень плохо, так как это была стандартная функция формата до Windows 3. Я был бы очень удивлен, если бы gzip не смог этого сделать. WinZip определенно может.
Роб Кеннеди