Добавление распакованных файлов в заархивированную папку

Добавление распакованных файлов в заархивированную папку

Я пытаюсь добавить разархивированные файлы в существующую уже заархивированную папку, скажем new folder.zip. Можно ли использовать zip -r new folder.zipпосле добавления в них некоторых разархивированных файлов? Сожмет ли эта команда папку? Есть ли альтернатива, чтобы сделать это?

решение1

Используйте флаг обновления:-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%)

решение2

Я думаю, что вы можете добавлять файлы с помощью этой команды:

zip -r zipfile.zip newfile.txt newfile1.txt

Опция -rкоманды zip позволяет добавлять файлы.

решение3

Я успешно использовал zipкоманду. срасти(-g) опция, чтобы добавить подпапку, folder1/folder2содержащую файлы fileA.txtи fileB.txt:

zip -gr folder.zip folder1/folder2

-rозначаетрекурсияреж.

Насколько я понимаю, -g должен увеличивать zip-файлы, а не создавать новый zip-файл (что может быть полезно для очень больших zip-архивов). В случае возникновения проблем вы можете попробовать сначала создать подпапки в folder.zip с помощью (например):

zip -g folder.zip folder1
zip -g folder.zip folder2

решение4

Если у вас много файлов в одном месте с вашим zip-архивом и вы хотите скопировать их все в архив, вы можете сделать следующее:

zip -ur zipfile.zip !(zipfile.zip)

Это обновит ваш zip-файл ( -uопция) рекурсивно ( -rопция) всеми найденными файлами, кроме самого zip-файла ( !является отрицанием zip-файла)

Затем вы можете просто удалить все файлы, кроме zip-файла, следуя тому же правилу, что и выше:

rm !(zipfile.zip)

Связанный контент