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


30

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

Answers:


32

使用-FS选项进行“文件同步”

zip -FSr foo.zip foo

这会将文件夹中的所有新文件添加到zip中,并删除该文件夹中没有的所有zip文件。


哪个版本的zip有此选项?我的zip命令无法识别“ -S”
Jayan 2014年

2
开关-FS-F-S在一起。至少从zip 3.0开始就已经存在。检查man zip
保罗

如何定义“新文件”?它的文件大小更改,修改日期,都是吗?只是好奇
Moseleyi

这仅适用于(Zip 3.0不适用)Zip 2.32(未删除zip压缩包中的旧文件)
Nabi KAZ

你的意思是-FS -r吧?
avalanche1

0

使用该-FS选项(或删除旧的ZIP文件)并覆盖现有的ZIP文件的一种替代方法是,要求zip将输出输出到stdin并将输出重定向到您选择的文件:

zip -r - foo >foo.zip

如果foo.zip存在,它将被shell重定向覆盖,这意味着您每次都会有100%的时间获得一个新的ZIP文件。


您的意思是输出到标准输出
flarn2006
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.