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

25

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

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

Mehrdad
источник
Есть ли конкретная причина (экономия каждого небольшого возможного времени обработки, чтение их без необходимости связывать двоичный файл 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 (Установить метод сжатия) .

harrymc
источник
Приведенная выше команда не сжимает текстовые файлы и добавляет только текстовые файлы в существующий архив. Перед запуском вышеуказанной команды необходимо создать файл архива с файлами не в формате 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

ivanatpr
источник
0

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

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

Конечно, есть работа и время просмотра файла в первую очередь.

Как уже говорилось в других ответах, выполнение нескольких проходов над набором файлов, вероятно, будет лучшим решением и легко поддается написанию сценариев.

Создайте архив 7z и добавьте все, НО сжатые файлы за один проход, затем добавьте предварительно сжатые файлы как несжатые данные. (Я бы сделал это таким образом, так как сжимаемое содержимое было бы тогда в начале архива, а несжимаемое все в конце. Это могло бы вытекать с диска быстрее, так как оно непрерывно)

(слишком много использовал «сжимать ...»!)

lornix
источник
1
В случае, если это кому-нибудь поможет, вот суть «кое-что о пределе энтропии или что-то подобное». Энтропия может рассматриваться как мера непредсказуемости. Идея сжатия заключается в том, что если вы можете предсказать структуру битов, вам не нужно хранить все это ... просто более компактные инструкции о том, как его предсказать (кодовое слово). Теоретическая максимальная энтропия достигается, когда с равной вероятностью следующее кодовое слово может быть чем угодно. Сжатие большего сжатия из сжатых данных происходит, когда второй проход идентифицирует оставшуюся предсказуемость на выходе первого.
Ssokolow