Сжатие ZIP-файлов с более высокой степенью сжатия

10

У меня есть большое количество zip-файлов, которые были сжаты с помощью команды zip. Я хотел бы повторно сжать их с флагом -9, чтобы улучшить степень сжатия. Кто-нибудь знает, может ли это быть сделано без распаковки и последующего сжатия вручную.

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

Smartelf
источник
повторное сжатие возможно только путем распаковки файла и повторного сжатия. это зависит от алгоритма. Вы также можете попробовать bzip2 или даже лучше xz.
Совет: это также может быть сделано с файлами Excel XLSX или XLSM, так как они на самом деле являются файлами ZIP, содержащими XML и другие файлы.
Кристиан Чиупиту

Ответы:

10

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

Можно повторно сжать файлы в zip-файле по одному и повторно добавить их перед переходом к следующему файлу, содержащемуся в zip-файле. Это требует N перезаписываний zip-файла для zip-файла, содержащего N файлов. Гораздо эффективнее извлечь N файлов и сгенерировать новый zipfile за один раз, сжав все файлы с помощью -9.

Энтон
источник
1
Моя цель не избежать декомпрессии, а сохранить структуру архива неизменной. и не изменять какие-либо метаданные файла.
Смартельф
1
@Smartelf Я не думаю, что вы можете избежать декомпрессии. Ваши другие требования возможны, нет никаких причин, по которым какие-либо данные должны были бы измениться.
Terdon
2
@ Smartelf, как я уже указывал, вы ** должны ** повторно сжать. Назначение одинаковых метаданных файла не должно быть проблемой, если вы делаете это, например, с помощью программы на Python и ее zip-модуля. С unzip/ zipсохранения метаданных такими же, вероятно , более трудная.
Anthon
6

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

gaelicWizard
источник