Які найкращі варіанти використовувати при стисненні файлів за допомогою 7 Zip?


61

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

Які найкращі налаштування використовувати під час стискання текстового файлу до zip-формату, коли мені потрібен лише невеликий розмір файлу?

7zip Параметри

Я зробив очевидний і вибрав ультра стиснення, і я помітив, що LZMA виконує кращу роботу, ніж дефляція, але для мене все це дуже багато інших перестановок, щоб перевірити їх усі.


1
Чи є розбиття поштового індексу на кілька файлів варіантом?
JaredMcAteer

3
Як тільки ви виберете щось, окрім Deflateформату, це вже не "звичайний" .zip файл, а "розширений" zip-файл, вперше створений WinZip. Вони спочатку зберігали розширення як .zip, до великого побоювання (оскільки більшість звичайних інструментів для обробки ZIP не може з ними боротися), але більшість архіваторів зараз використовують .zipx, щоб відрізнити їх від традиційних .zip-файлів. Якщо ви можете використовувати LZMA, перейдіть на .7z і виберіть PPMd - він повинен стискати краще (і швидше!) Для текстових файлів.
afrazier

1
@afrazier: "Специфікація формату файлу .ZIP документує такі способи стиснення: збережені (без стиснення), зменшені, зменшені (методи 1-4), вкладені, токенізуючі, дефльовані, дефляційні64, bzip2, LZMA (EFS), WavPack, PPMd . " en.wikipedia.org/wiki/Zip_%28file_format%29#Compression_methods
endolith

1
@endolith: bzip2, lzma, wv та ppmd - все це зовсім недавні доповнення до файлового формату. Не можна навіть припустити, що ваш одержувач може впоратися з дефляцією64, тим більше що чимось новішим.
afrazier

1
визначити "звичайні інструменти zip". Більшість "звичайних інструментів 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

2
@Tek: Чому? Це не дуже добре. Питання полягало у використанні "стандартного ZIP-формату", тому відповідь не повинна вказувати LZMA. -ms = on призначений для .7z, а не стандартних zip-файлів. -md пов'язаний з BZip2, тому я не очікую, що він вплине на ZIP (або навіть LZMA). -mfb = 64 - неоптимізоване значення: -mfb = 258 робить менші ZIP-файли. І ця відповідь навіть не згадує -mpass = 15, що може вплинути на поштові файли. Це добре відформатована відповідь, яка, на жаль, є помилковою в декількох способах.
TOOGAM

6
Я б використав lzma2
Lance Badger

Якщо ви подивитесь на 7-zip FAQ, це говорить про те, що новіші версії 7z можуть мати гірші показники, ніж старі версії в деяких умовах. Прочитайте поширені запитання для більш детальної інформації, але коротко використовуйте 'qs' у полі Параметри в графічному інтерфейсі або використовуйте -mqs у версії командного рядка для використання старого сортування за методом розширення файлу. 7-zip.org/faq.html .
drojf

13

Якщо ви можете використовувати формат .7z, а не просто .zip, я б просто застосував PPMD із наведеними нижче параметрами, а все інше залиште так, як встановлено рівнем стиснення:

  • Формат архіву: 7z
  • Спосіб стиснення: PPMD
  • Рівень стиснення: Ультра

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


Для тексту, такого як файли журналу, ppmd - це безперечно шлях. Однак у запитанні було зазначено, що потрібно зберігати формат zip, який може не працювати з PPMD.
Брайан Мінтон

Щойно спробував поштовий індекс з PPMD ​​та Windows Explorer відкриває вміст без скарг тут у Windows 7
Umber Ferrule

3
Я теж це помітив. Це відкриває вміст просто чудово. Однак коли я насправді намагався переглянути один із файлів всередині zip-файлу, це не вдалося.
Брайан Мінтон

2
Чому поліпшений метод стиснення для текстових файлів PPMD?
користувач598527

1
LZMA2 дає кращі результати для текстових файлів, ніж PPMD.
T3rm1

7

Я порівнюю для db.fdb 1,2 ГБ (1236598784 B) на сервері Ubuntu 14.04.03 з p7zip [64] 9.20 на VM:

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-код, щоб правильно їх розібрати. Або, можливо, це повинно працювати і просто зламане в тестах, які були протестовані.


Нічого, це зробило дійсно велику зміну. Для свого архіву я експериментував з багатьма іншими пропозиціями, включаючи інші відповіді тут, і найкращий результат, який я отримав, - 99 МБ проти 85 МБ, використовуючи ці налаштування.
користувач9399

0

Встановіть поле "розділити на об'єм, байти" на максимально дозволений розмір файлу сервера (я думаю, в байтах, хоча, схоже, він приймає загальні абревіатури типу "KB" і "MB"). Якщо zip-файл перевищує цей розмір, 7-zip автоматично розбиває його на кілька файлів, наприклад integra_serviceLog.zip.001 , integra_serviceLog.zip.002 тощо. (Зворотній шлях, коли PK Zip використовував це для перенесення поштових файлів на кілька дискети.) Щоб розпакувати їх, вам знадобляться всі файли. Використовуйте це, замість того, щоб перейматися абсолютними найкращими параметрами стиснення для будь-якого конкретного набору файлів, тому що найкраще для одного файлу може відрізнятися для іншого файлу, і вам не хочеться проходити це кожен раз, коли вам потрібно копіювати журнали.


1
Мене хвилює те, як люди з іншого боку розпакують файли. Мені потрібно, щоб вони були максимально простими для них. Чи знаєте ви, чи можна розпакувати розділені томи за допомогою вбудованого zip-windows або gzip?
jjnguy

Мабуть, ні, вбудована функція zip-папки Windows не має натягнутих zip-файлів. Це дуже погано, оскільки це було стандартною особливістю формату ще до Windows 3. Я був би дуже здивований, якби gzip не зміг цього зробити. WinZip точно може.
Роб Кеннеді
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.