$(which zip) -r ../data.zip .
文件夹的内容随着时间的推移动态变化,我首先使用包含huge.pdf
文件对其进行测试,然后将其删除,但仍然data.zip
保持相同的大小。解压后我可以看到huge.pdf
那里的文件。
我希望 zip 命令完全覆盖现有的存档。
我正在应用程序(nodejs)中执行这个 shell 命令
编辑:我不认为链接的问题是重复的。
答案1
首先请注意,执行zip
through$(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