За последние несколько месяцев я скопировал несколько папок с данными для архивирования файлов с недельными интервалами. Теперь я хотел бы объединить эти zip-файлы в один zip-файл, потому что большая часть содержимого существующих zip-файлов - это просто разные версии одних и тех же файлов данных.
Поэтому, если файл появляется в нескольких существующих zip-файлах, я бы хотел, чтобы самая новая версия была в новом создаваемом zip-файле. Конечно, если файл появляется только в одном существующем zip-файле, то я хочу, чтобы он был и в конечном zip-файле.
Я пытаюсь избежать необходимости разархивировать их одну за другой в рабочую папку, перезаписывая данные из старых файлов ZIP с данными из более новых файлов Zip, а затем заново упаковывать все в новый файл Zip.
Из того, что я понимаю, pkzip объединит сами zip-файлы, но есть ли надежный и быстрый бесплатный метод, о котором кто-нибудь может мне рассказать?
Ответы:
Вам это не понравится, но: разархивировать все в рабочую папку в правильном порядке, а затем архивировать результат является наиболее эффективным способом.
в противном случае вы получите много потерянных циклов ЦП:
.zip, обновляя файл в середине), и весь файл должен быть переписан
Итак, imho просто используйте « распаковать » Wiseley:
Порядок распаковки важен, я не знаю, как устроены ваши почтовые имена, но сначала я извлеку самый новый zip-файл, опция un-zip -u перезаписывает только файлы, если они новее, или создает файлы, если нет уже здесь. в результате вы распакуете только самые новые файлы и заархивируете результат только один раз.
источник
zipmerge
утилите слияния ZIP архивов без распаковки и повторного сжатия, например.unzipping
/zipping
и нетuncompress / decompress
. Да, очевидно, можно взять одну запись2.zip
(сжатый BLOB-объект) и перенести ее в нее,first.zip
и, таким образом, «сжатие» не должно выполняться. Но вы должны извлечь BLOB-объект из2.zip
, проверить наличие в TOCfirst.zip
, если он там либо заменить существующую запись (что означает, что вы должны переписать весь файл в основном), либо добавить его в конце - и после этого вам нужно добавьте ток почтового индекса. Я не понимаю, какzipmerge
можно добиться слияния zip-записей другим способом (без сжатия)every file [...] has to be unzipped and then zipped again
- нет, это то, что делает ваше решение.in '2.zip' exists a file 'foobar.txt' and in '3.zip' exists another file 'foobar.txt'. merging it the way you want to merge it leads to 'compress it X times'
- нет, это не так. С чего бы это?you add more content [...] and the whole file has to be rewritten
- нет, вы пишете вывод за один проход. Почему кто-то высказался против этого?Просто используйте опцию -g ZIP, где вы можете добавить любое количество ZIP-файлов в один (без извлечения старых). Это сэкономит вам значительное время.
Также взгляните на zipmerge
источник
-g
добавляет файлы в существующий почтовый индекс. это не объединяет их. Например:zip -g result.zip other.zip
добавит файлother.zip
в result.zip.
--grow Вырастить (добавить в) указанный zip-архив вместо создания нового. Если эта операция не выполняется, zip пытается восстановить архив в исходное состояние. Если восстановление не удалось, архив может быть поврежден. Этот параметр игнорируется , если нет существующего архива или когда по меньшей мере один член архива должны быть обновлены или deleted.`Возможно, это не то, что вам нужно, но бесплатный инструмент сборки Ant включает возможность объединения Zip-файлов.
https://ant.apache.org/manual/Tasks/zip.html
источник
https://linux.die.net/man/1/zipmerge :
источник
Я думал, что вы можете написать сценарий извлечения файлов во временный каталог.
Существует проблема с этой командной строкой. Я не смог найти способ распаковать архивы, поэтому старый архив может перезаписать новый. Эта проблема может быть преодолена с помощью расстегивающего молнии, который имеет переключатель командной строки, чтобы перезаписать только если новее. Я в основном использую 7-Zip, у которого нет такой опции командной строки.
Кроме того, эта команда необходима для всех файлов zip, находящихся в одном каталоге. Не проблема, если все почтовые индексы имеют уникальные имена. Тем не менее, команда может быть изменена в соответствии с вашей ситуацией.
for /f %f in ('dir /b *.zip') do "c:\program files\7-zip\7z" x %f -oc:\testdir -r -aoa
Чтобы изменить это на использование другой разархивирующей программы, просто замените ее
"c:\program files\7-zip\7z" x %f -oc:\testdir -r -aoa
любой командой, которую вы выполняете для каждого файла. Используйте%f
в качестве заполнителя имя файла, который вы хотите распаковать.Я пытался искать отшлифованное приложение, бесплатное или нет, но так и не нашел.
Надеюсь, это даст вам хороший старт, и WinZip или что-то подобное может решить проблему перезаписи.
Удачи.
источник
Если я правильно помню, pkzip был программой командной строки.
По-прежнему существует версия ZIP для командной строки, которая утверждает, что она совместима с pkzip.
Он называется Info-ZIP и должна быть версия для вашей ОС.
источник
Ищите командную строку winzip в сети. Winzip имеет несколько версий инструментов командной строки, чтобы соответствовать любой версии winzip, которую вы, возможно, установили. Утилита командной строки WZZIP имеет опцию -f «освежить», которая будет заархивировать более новые файлы только из тех, которые соответствуют имени файла в zip-файле суммирования.
Используйте WZunzip, заключенный в оператор FOR, как показано выше, чтобы разархивировать один файл в каталог, а затем WZzip -f, чтобы добавить эти файлы в выходной zip-файл суммирования. Затем цикл FOR повторяется для работы со следующим входным файлом для вывода в единственный выходной файл суммирования. Порядок входных файлов не имеет значения, поскольку WZzip -f будет добавлять в выходной файл только в том случае, если входные данные новее, чем те, которые уже есть в выходном файле. Все файлы, которые не существуют в выходном файле, также будут добавлены. Затем вы можете разархивировать результат в папку, а затем снова сжать его, чтобы получить эффективно упакованный файл результатов. Вы даже можете сделать это автоматически после цикла FOR в конце пакетного файла.
источник