Як перезаписати наявний zip-файл замість оновлення в Info-Zip?


30

Щоб отримати свіжий zip-файл, як і tar, чи потрібно це виконувати rm foo.zipперед виконанням zip?

$ mkdir foo; touch foo/bar
$ zip -r foo.zip foo
  adding: foo/ (stored 0%)
  adding: foo/bar (stored 0%)
$ rm foo/bar; touch foo/baz
$ zip -r foo.zip foo
  adding: foo/ (stored 0%)
  adding: foo/baz (stored 0%)
$ unzip -l foo.zip
Archive:  foo.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
        0  2011-10-27 07:49   foo/
        0  2011-10-27 07:49   foo/bar
        0  2011-10-27 07:49   foo/baz
---------                     -------
        0                     3 files

Відповіді:


32

Використовуйте опцію -FS для "синхронізації файлів"

zip -FSr foo.zip foo

Це додасть будь-які нові файли в папці до zip та видалить усі файли із zip, які відсутні у папці.


Яка версія zip має цю опцію? Моя команда zip не розпізнає "-S"
Jayan

2
Вимикача -FSнемає -Fі -Sразом. Це було принаймні з zip 3.0. Перевірка man zip.
Пол,

Як визначається "новий файл"? Його зміни розміру файлів, дату змінено, обидва? Просто цікаво
Мозелей

Це просто працює Zip 3.0і не працює Zip 2.32(не видаляв старі файли в zip-пакеті)
Nabi KAZ

Ви маєте на увазі -FS -r, правда?
лавина1

0

Альтернативою для використання -FSпараметра (або видалення старого ZIP-файлу) та буквального перезапису існуючого ZIP-файлу є прохання zipвивести stdin та перенаправити вихідний файл на ваш вибір:

zip -r - foo >foo.zip

Якщо foo.zip існує, він буде перезаписаний перенаправленням оболонки, тобто ви отримаєте новий новий ZIP-файл 100% часу, кожен раз of


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