如何合并/合并 zip 文件?

CCh*_*iss 24 zip

在过去的几个月里,我每周都将几个数据文件夹复制到 zip 文件中。现在我想将这些 zip 文件合并为一个 zip 文件,因为现有 zip 文件的大部分内容只是相同数据文件的不同版本。

因此,如果文件出现在多个现有 zip 文件中,我希望最新版本位于正在创建的新 zip 文件中。当然,如果一个文件只出现在一个现有的 zip 文件中,那么我也希望它出现在最终的 zip 文件中。

我试图避免将它们一个一个地解压缩到一个工作文件夹,用新的 zip 文件中的数据覆盖旧 zip 文件中的数据,然后将所有内容重新压缩到一个新的 zip 文件中。

据我所知 pkzip 会结合 zip 文件本身,但是有没有人可以告诉我一个可靠且快速的免费方法?

aki*_*ira 7

你不会喜欢它但是:以正确的顺序将所有内容解压缩到工作文件夹中,然后压缩结果是最有效的方法。

否则,您最终会浪费大量 CPU 周期:

  • 假设您的结果转到“first.zip”
  • '2.zip'、'3.zip' 等中的每个文件都必须解压缩,然后再次压缩到 'first.zip'
  • 在'2.zip'中存在一个文件'foobar.txt',在'3.zip'中存在另一个文件'foobar.txt'。以您想要的方式合并它会导致“压缩 X 次”
  • .zip 的目录位于文件的末尾:您添加更多内容(
    通过更新中间的文件到.zip 的中间)并且必须重写整个文件

所以,恕我直言,只需使用'解压缩' wiseley:

% mkdir all
% for x in *.zip ; do unzip -d all -o -u $x ; done
% zip -r all.zip all
Run Code Online (Sandbox Code Playgroud)

解压缩的顺序很重要,我不知道您的 zip 名称的模式,但我会先提取最新的 zip 文件,unzip 的“-u”选项仅覆盖较新的文件,否则创建文件已经在那了。因此,您将只解压缩最新的文件并且只将结果压缩一次。

  • @benrg:我在这里没有看到你的答案...... (2认同)

小智 6

只需使用 ZIP 的 -g 选项,您可以将任意数量的 ZIP 文件附加到一个文件中(无需提取旧文件)。这将为您节省大量时间。

还可以看看zipmerge

  • `-g` 将文件添加到现有 zip 中。它不会合并它们。例如: `zip -g result.zip other.zip` 会将文件 `other.zip` 添加到 result.zip` 中。`--grow 增长(追加)指定的 zip 存档,而不是创建新的。如果此操作失败,zip 会尝试将存档恢复到其原始状态。如果恢复失败,存档可能会损坏。当不存在现有存档或必须更新或删除至少一个存档成员时,将忽略此选项。 (5认同)

imz*_*hev 6

https://linux.die.net/man/1/zipmerge

zipmerge 将源 zip 存档合并source-zip到目标 zip 存档中target-zip。默认情况下,源 zip 存档中的文件会覆盖目标 zip 存档中的同名现有文件。


Car*_*rlF 5

它可能不是您要找的,但免费的 Ant 构建工具确实包含合并 Zipfile 的功能。

https://ant.apache.org/manual/Tasks/zip.html