Как сделать «Файлы для хранения без сжатия» в 7-zip?


25

Есть ли способ выборочно предотвратить сжатие определенных типов файлов в 7-zip, как в WinRAR?

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


Есть ли конкретная причина (экономия каждого небольшого возможного времени обработки, чтение их без необходимости связывать двоичный файл 7z или повторная реализация LZMA и т. Д.), Что вы хотите сделать это? Вообще говоря, большинство инструментов сжатия, с которыми я сталкивался, имеют тенденцию быть достаточно умными, чтобы автоматически сохранять несжатые файлы, если они находят файл, плохо реагирующий на попытку дальнейшего сжатия.
Ssokolow

@ssokolow: Прошло 4 года, и я думаю, что никогда не отвечал на ваш вопрос, но могут быть и другие причины, такие как минимизация ущерба от коррупции и облегчение восстановления данных в случае аварии.
Мердад

Ответы:


19

Да, можно использовать разные методы сжатия для разных файлов в одном и том же архиве 7-Zip.

Используйте версию командной строки 7-Zip с -mпараметром, чтобы указать метод как Copy, что означает отсутствие сжатия.

Пример :

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

Для получения дополнительной информации см. Ключ -m (Установить метод сжатия) .


Приведенная выше команда не сжимает текстовые файлы и добавляет только текстовые файлы в существующий архив. Перед запуском вышеуказанной команды необходимо создать файл архива с файлами не в формате TXT. Не так просто, если есть n разных типов файлов.
Правин Срипати

Если -m0=Copyне работает, попробуйте -mx=0.
Бора М. Альпер

15

Предположим, у вас есть zip-файлы и несжатые txt-файлы в вашей папке.

Первый шаг - создать архив, сжимающий текстовые файлы, используя следующую команду.

Вы можете использовать -m для установки уровней сжатия, это также зависит от используемого вами метода сжатия.

Предположим, что здесь используется только сжатие по умолчанию

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

Вы получите сжатый 7z сейчас.

Второй шаг будет скопировать уже сжатый файл в этот архив или создать новый архив

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.