Как перезаписать существующий zip-файл вместо его обновления в Info-Zip?

Чтобы получить новый 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

2 ответа

Решение

Используйте опцию -FS для синхронизации файлов

zip -FSr foo.zip foo

Это добавит любые новые файлы в папке в zip-архив и удалит все файлы из zip-файла, которых нет в папке.

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

zip -r - foo >foo.zip

Если файл foo.zip существует, он будет перезаписан перенаправлением оболочки, то есть каждый раз вы будете получать новый новый файл ZIP в 100% случаев.

Другие вопросы по тегам