如何覆盖现有的 zip 文件而不是在 Info-Zip 中更新它?

如何覆盖现有的 zip 文件而不是在 Info-Zip 中更新它?

要获得像 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

相关内容