Як перезаписати наявний 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.