Как перезаписать существующий 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% случаев.