How to overwrite existing zip file instead of updating it in Info-Zip?
To obtain a fresh zip file just like as tar does, do I have to perform rm foo.zip
before executing 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
Use the -FS option to "file sync"
zip -FSr foo.zip foo
This will add any new files in the folder to the zip, and delete any files from the zip that aren't in the folder.
An alternative to using the -FS
option (or deleting the old ZIP file), is to overwrite the existing ZIP file by having zip
write to stdout and redirecting it to the designated file:
zip -r - foo >foo.zip
-r : Add directory and its contents
- : Instead of writing ZIP to a file, write to stdout
foo : The directory to be zipped
>foo.zip : Redirect stdout to file foo.zip
If foo.zip
exists, it will be overwritten by shell redirection, meaning you'll get a fresh new ZIP file 100% of the time, every time. 🙂