Як зробити "Файли для зберігання без стиснення" у 7-zip?


25

Чи є спосіб вибірково запобігти стисканню певних типів файлів у 7-zip, як у WinRAR?

Я намагаюся стиснути величезну папку (багато гігабайт), і я не хочу повторно стискати вже стиснуті файли (наприклад, ZIP-файли) - вони повинні зберігатися без стиснення.


Чи є певна причина (економити кожен можливий час обробки, читати їх, не зв'язуючи двійкові 7z або повторно реалізовуючи LZMA тощо), що ви хочете це зробити? Взагалі кажучи, більшість інструментів стиснення, з якими я зіткнувся, мають тенденцію бути достатньо розумними, щоб автоматично зберігати речі, нестиснуті, якщо вони знаходять файл, що погано реагує на спробу його подальшого стиснення.
ssokolow

@ssokolow: Минуло 4 роки, і, мабуть, я ніколи не відповідав на ваше запитання, але можуть бути й інші причини, такі як мінімізація шкоди від корупції, а також полегшення відновлення даних при катастрофі.
Мехрдад

Питання підключене: unix.stackexchange.com/questions/241898/…
bohdan_trotsenko

Відповіді:


19

Так, для одного файлу в одному 7-Zip архіві можливі різні методи стиснення.

Використовуйте версію командного рядка 7-Zip з -mпараметром, щоб вказати метод як Copy, що означає відсутність стиснення.

Приклад:

7za a -m0=Copy tmp7.7z *.txt

Для отримання додаткової інформації див . Перемикач -m (Встановити метод стиснення) .


Наведена вище команда не стисне файли txt і додасть лише файли txt до наявного архіву. Перед запуском вищевказаної команди слід створити архівний файл з файлами не-txt. Не так просто, якщо є n різних типів файлів.
Praveen Sripati

Якщо -m0=Copyне виходить, спробуйте -mx=0.
Бора М. Альпер

15

Припустимо, у вас є поштові файли та у вашій папці не стиснуті файли txt.

Першим кроком є створення архіву, що стискає файли txt, використовуючи наступну команду.

ви можете використовувати -m для встановлення рівнів стиснення, це також залежить від методу стиснення, який ви використовуєте

Давайте припустимо, що тут компресія лише за замовчуванням

7z a compressed.7z *.txt -r 

Ви зараз отримаєте стиснення.

Другий крок буде скопіювати вже стиснений файл в цей архів або створити новий архів

7z u compressed.7z -u!update.7z -mx0 *.zip 

Існує подальша розробка команди поновлення тут

І якщо у вас є можливість використовувати графічний інтерфейс, оновлення можна зробити наступним чином

введіть тут опис зображення


Вид клопоту, але я думаю, що це спрацювало б, спасибі.
Мехрдад

1

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

Ви можете знайти сценарій тут: https://gist.github.com/ivanatpr/5dea086172eab573ba71


0

Технічно стислі файли не стискаються далі, щось про обмеження ентропії чи інше, я забуваю деталі, але найбільше, що ви коли-небудь отримали, - це менше 2%, що я бачив.

Більшість хороших компресорів перевіряють стиснення і просто зберігають нестискаються файли, оскільки компресія тоді додасть накладні витрати та збільшить розмір.

Звичайно, тут працює робота та час перегляду файлу.

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

Створіть 7z архів і додайте все, АЛЕ стиснені файли за один прохід, а потім додайте попередньо стиснуті файли як нестиснені дані. (Я зробив би це так, оскільки тоді стислий матеріал був би на початку архіву, а нестислимий - все в кінці. Він витікатиме з диска швидше, оскільки він суміжний)

(занадто багато використовується "стиснути ..."!)


1
Якщо це допомагає комусь, ось суть "щось про обмеження ентропії чи іншого". Ентропію можна розглядати як міру непередбачуваності. Ідея стиснення полягає в тому, що, якщо ви можете передбачити шаблон біт, вам не потрібно зберігати всю справу ... просто більш компактні інструкції, як її передбачити (кодове слово). Теоретична максимальна ентропія досягається тоді, коли однаково ймовірно, що наступним кодовим словом може бути що завгодно. Витіснення більшої компресії зі стислих даних відбувається, коли другий прохід визначає залишок передбачуваності на виході першого.
ssokolow
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.