Как обновить один файл в zip-архиве



можно ли заменить файл в zip-файле без распаковки, удалив старый файл, добавив новый файл и переписав его обратно?



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



Так и есть можно просто заменить один xml без распаковки и переписывания ?



Извините, я бы использовал команду zip, чтобы делать такие вещи, но проблема в том, что скрипт на самом деле для телефона android, а zip-это не команда, которую я могу использовать, к сожалению, извините, что я оставил это. Я бы использовал zip определенно, если бы мог, но у меня есть только распаковать для droid, а затем есть tar в busybox, но tar не делает то, что мне нужно

1543   10  

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 &lt-- NEW FILE 

использование

$ zip -ur existing.zip ParentDir 
> updating: ParentDir/ChildDir/Logs (stored 0%)
>   adding: ParentDir/ChildDir/Logs/logs4.txt (stored 96%)

вы можете использовать: zip-u файл.zip path / file_to_update

существует также опция-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

    Ничего не найдено.