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

33

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

бу на
источник
Вы можете передать это, распаковать исходный файл | затем заархивируйте весь контент, как если бы вы создали новый файл. Я не уверен, как бы вы сделали это с помощью одной команды.
unixmiah

Ответы:

44

Используйте флаг обновления: -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%)
Этан Страйдер
источник
Благодарность! Как я могу указать папку в почтовом индексе, чтобы добавить его в?
Аарон Исав
Я добавил раздел, чтобы ответить на ваш вопрос. :)
Итан Страйдер
0

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

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

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

ryekayo
источник
-rэто рекурсивный вариант.
Ctrl-Alt-Delor
@ Ричард, я исправлю это. Дай мне несколько
ryekayo
@ Richard, источник, из которого я получил информацию, говорит, что вы можете использовать команду -r, чтобы изменить существующий заархивированный файл: linuxnix.com/2014/05/…
ryekayo
2
add - обновить существующие записи и добавить новые файлы. Если архив не существует, создайте его. Это режим "по умолчанию". (нет необходимости в замене или добавлении файлов. -rМожет использоваться при добавлении каталогов или при отсутствии добавления каталогов. В любое время, когда вы не хотите просто добавлять каталог и без содержимого, так что почти все время Короче говоря, пример верный, но объяснение неверное.) (Лучше всего проверить это, это только моя интерпретация руководства).
ctrl-alt-delor
2
Из соображений безопасности вы УВЕРЕНЫ, что хотите изменить существующий архив? Вместо этого я бы, по крайней мере, сделал безопасную копию, сделал бы добавление, а затем перепроверил целостность архива перед тем, как перейти к новому.
mdpc
0

Флаг -u работает для файлов

zip -ur zip_to_upload.zip file_to_add.txt

С уважением

Дэвид Лопес
источник
0

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

zip -gr folder.zip folder1/folder2

-rозначает recurse dir.

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

zip -g folder.zip folder1
zip -g folder.zip folder2
Фабиано Тарлао
источник
0

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

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

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

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

rm !(zipfile.zip)
Деспина
источник