Как обновить один файл в zip-архиве
можно ли заменить файл в zip-файле без распаковки, удалив старый файл, добавив новый файл и переписав его обратно?
причина в том, что у меня есть zip-файл, который действительно большой есть один xml внутри zip-файла, который я должен иногда обновлять. Распаковка молнии и резинка занимает много времени. Поэтому я хотел бы просто заменить один xml внутри zip через скрипт. У меня уже есть, что проверяет наличие обновлений на xml у меня есть.
Так и есть можно просто заменить один xml без распаковки и переписывания ?
Извините, я бы использовал команду zip, чтобы делать такие вещи, но проблема в том, что скрипт на самом деле для телефона android, а zip-это не команда, которую я могу использовать, к сожалению, извините, что я оставил это. Я бы использовал zip определенно, если бы мог, но у меня есть только распаковать для droid, а затем есть tar в busybox, но tar не делает то, что мне нужно
10 ответов:
С zip (1):
если задано имя существующего zip-архива, zip заменит одноименные записи в zip-архиве или добавит записи для новых имен.
Так что просто используйте
zipкоманда, как обычно, чтобы создать новый .zip-файл, содержащий только один файл, за исключением .zip-имя файла, которое вы укажете, будет существующим архивом.
Я нашел Linux
zipфайл должен быть громоздким для замены одного файла в zip. Элементjarутилита из Java Development Kit может быть проще. Рассмотрим общую задачу обновленияWEB/web.xmlв файле JAR (который является просто zip-файлом):jar -uf path/to/myapp.jar -C path/to/dir WEB-INF/web.xmlздесь
path/to/dir- это путь к каталогу, содержащемуWEB-INFкаталог (который в свою очередь содержитweb.xml).
попробуйте следующее:
zip [zipfile] [file to update]пример:
$ zip test.zip test/test.txt adding: test/test.txt (stored 0%)
Я знаю, это старый вопрос, но я хотел сделать то же самое. Обновить файл в zip-архиве. И ни один из вышеперечисленных ответов мне не помог.
вот что я сделал. Создан временный каталог
abc. Скопированоfile.zipдоabcи извлек файл в этом каталоге. Я отредактировал файл, который хотел отредактировать. Затем находясь вabc, выполнил следующую командуuser@host ~/temp/abc $ zip -u file.zip updating: content/js/ (stored 0%) updating: content/js/moduleConfig.js (deflated 69%)
-uпереключатель будет искать измененные / новые файлы и добавит в zip-архив.
используйте флаг обновления:
-uпример:
zip -ur existing.zip myFolderэта команда будет сжимать и добавить
myFolder(и это содержимое) кexisting.zip.
Дополнительные Функции:
флаг обновления фактически сравнивает входящие файлы с существующими и будет либо добавлять новые файлы, либо обновлять существующие.
поэтому, если вы хотите добавить / обновить определенный подкаталог в zip-файле, просто обновите источник по желанию, а затем повторно заархивируйте весь источник с помощью
-uфлаг. Только измененные файлы будут заархивированы.если у вас нет доступа к исходным файлам, вы можете распаковать zip-файл, затем обновить нужные файлы, а потом запаковать с
-uфлаг. Опять же, только измененные файлы будут сжаты.пример:
Первоисточник Структура
ParentDir ├── file1.txt ├── file2.txt ├── ChildDir │ ├── file3.txt │ ├── Logs │ │ ├── logs1.txt │ │ ├── logs2.txt │ │ ├── logs3.txtОбновлена Структура Источника
ParentDir ├── file1.txt ├── file2.txt ├── ChildDir │ ├── file3.txt │ ├── Logs │ │ ├── logs1.txt │ │ ├── logs2.txt │ │ ├── logs3.txt │ │ ├── logs4.txt <-- NEW FILEиспользование
$ zip -ur existing.zip ParentDir > updating: ParentDir/ChildDir/Logs (stored 0%) > adding: ParentDir/ChildDir/Logs/logs4.txt (stored 96%)
существует также опция-f, которая обновит zip-файл. Он может использоваться для обновления всех файлов, которые были обновлены с момента создания zip (при условии, что они находятся в одном и том же месте в структуре дерева в zip-файле).
Если ваш файл называется /myfiles / myzip.молнии все, что вам нужно сделать, это
zip -f /myfiles/myzip.zip
со стороны структуры архива ZIP - вы можете обновить zip-файл без его повторного сжатия, вам просто нужно будет пропустить все файлы, которые предшествуют файлу, который вам нужно заменить, а затем поместить обновленный файл, а затем остальные файлы. И, наконец,вам нужно будет поместить обновленную структуру каталогов centeral. Однако я сомневаюсь, что наиболее распространенные инструменты позволят вам сделать это.
7zip(7za) можно использовать для добавления/обновления файлов/каталогов красиво:пример: Замена (независимо от даты файла)
MANIFEST.MFфайл в файле JAR. Элемент
да это возможно.
в системах на базе linux просто установите zip, и вы можете вызвать его в командной строке. взгляните на manpage:http://linux.die.net/man/1/zip
но по моему личному опыту, если это возможно и сжатие не так важно, это лучше работает с обычными файлами tar и tar.
Comments