Додавання розпакованих файлів у папку, на яку розміщено папку


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%)

Спасибі! Як я можу вказати папку в zip, щоб додати її?
Аарон Ісав

Я додав розділ, щоб відповісти на ваше запитання. :)
Етан Стрідер

0

Я вважаю, що ви можете додавати файли за допомогою цієї команди:

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

-rВаріант команди зіп дозволяє додавати файли.


-rє рекурсивним варіантом.
ctrl-alt-delor

@richard, я це виправлю.
Дайте

@richard, виявляється джерело, з якого я отримав це, говорить, що ви можете використовувати команду -r, щоб змінити існуючий zipped файл: linuxnix.com/2014/05/…
ryekayo

2
add - оновлення існуючих записів та додавання нових файлів. Якщо архіву не існує, створіть його. Це режим за замовчуванням. (не потрібен варіант для заміни або додавання файлів. -rможна використовувати при додаванні каталогів або при додаванні каталогів. Добре будь-коли, коли ви не хочете просто додавати каталог і не вміст, так що майже весь час . Отже, коротше, приклад правильний, але пояснення неправильне.) (Найкраще перевірити це, це лише моя інтерпретація посібника).
ctrl-alt-delor

2
З міркувань безпеки Ви впевнені, що хочете змінити існуючий архів? Натомість я хоч би зробив копію безпеки, зробив додавання та повторно перевірив цілісність архіву, перш ніж перейти до нового.
mdpc


0

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

zip -gr folder.zip folder1/folder2

-rозначає рекурс реж.

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

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

0

Якщо у вас в одному місці з поштовим архівом багато файлів, і ви хочете скопіювати їх у архів, ви можете зробити:

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

Це оновлює ваш zip-файл ( -uопція) рекурсивно ( -rопція) з усіма знайденими файлами, крім самого zip-файлу ( !це заперечення zipfile)

Тоді ви можете просто видалити всі файли, окрім zip-файлу, виконуючи те саме правило, наведене вище:

rm !(zipfile.zip)
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.