Unix zip 命令正在更新现有存档而不是创建新存档

use*_*195 7 shell zip

$(which zip) -r ../data.zip .
Run Code Online (Sandbox Code Playgroud)

文件夹的内容随着时间的推移而动态变化,我首先使用包含huge.pdf文件对其进行了测试,然后将其删除,但仍然data.zip保持相同的大小。解压时我可以在huge.pdf那里看到文件。

我希望 zip 命令完全覆盖现有的存档。

我在应用程序(nodejs)中执行这个shell命令

编辑:我不认为链接的问题是重复的。

Kus*_*nda 9

首先请注意,执行zipthrough$(which zip)与执行 just 相同zip。该which实用程序在用户路径中定位程序文件。

给定现有的 Zip 存档,zip添加新文件、替换现有文件,但如果这些文件已从文件系统中删除,则不会删除存档中的文件。

要从 Zip 存档中删除文件:

$ zip -d archive.zip filename
Run Code Online (Sandbox Code Playgroud)

您显然也可以rm在重新创建存档之前删除存档。

对于您的 NodeJS 脚本,您可以使用

rm -f ../data.zip && zip -r ../data.zip .
Run Code Online (Sandbox Code Playgroud)

-f以标志rm品牌rm如果归档文件不存在,不会失败。

  • @user2727195 `$(which zip)` 可以,在一些不寻常的情况下,由于系统的安装方式(`zip` 位于包含特殊字符的目录名中,或者 `which` 命令不可用),无法调用`zip` 当一个普通的 `zip` 可以工作时。当一个普通的 `zip` 失败时,它永远不会成功,除非在异常情况下你必须在脚本中强制执行(绕过一个名为 `zip` 的函数或别名,对于这种情况,`command zip` 是正确的解决方案——但是这在任何理智的情况下都没有必要)。永远不要使用`$(which zip)`:它不可能帮助并且肯定会伤害。 (3认同)
  • @user2727195 `rm` 的 `-f` 标志使其在文件不存在时不会失败。 (2认同)