要获得像 tar 一样的新 zip 文件,我必须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
答案1
使用 -FS 选项进行“文件同步”
zip -FSr foo.zip foo
这会将文件夹中的所有新文件添加到 zip 中,并从 zip 中删除文件夹中不存在的所有文件。
答案2
使用该选项(或先删除旧的 ZIP 文件)的替代方法-FS
是覆写通过将现有的 ZIP 文件zip
输出到 stdout 并将其重定向到指定文件:
zip -r - foo >foo.zip
如果foo.zip
存在,它将被 shell 重定向覆盖,这意味着您每次都会 100% 获得一个全新的 ZIP 文件。
选项 | 解释 |
---|---|
-r |
递归添加目录及其内容 |
- |
将 ZIP 内容输出到标准输出 |
foo |
要压缩的目录 |
>foo.zip |
将标准输出重定向到文件foo.zip |