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

Unix zip 命令正在更新现有存档而不是创建新存档
$(which zip) -r ../data.zip .

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

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

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

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

答案1

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

给定一个现有的 Zip 存档,zip添加新文件,代替现有文件,但不会删除存档中的文件(如果这些文件已从文件系统中删除)。

要从 Zip 存档中删除文件:

$ zip -d archive.zip filename

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

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

rm -f ../data.zip && zip -r ../data.zip .

如果存档不存在,则该-f标志不会rm失败。rm

答案2

正如它指出zip命令的帮助条目:

默认操作是添加或替换列表中的 zip 文件条目

huge.pdf这解释了为什么默认行为不涉及删除 zip 文件中的文件,以及保留在其中的原因。

如果您想完全覆盖现有存档,您可以创建一个新的临时 zip 文件,然后替换之前的文件。此外,which命令调用似乎不是必需的,因此命令应如下所示:

zip -r temp.zip . ; mv temp.zip ../data.zip

相关内容