如何将 zip 文件拆分成更小的 zip 文件

如何将 zip 文件拆分成更小的 zip 文件

有没有办法将 ZIP 档案拆分成多个较小的 zip 文件,而不需要将它们合并为一个大的 zip 文件来解压较小的 zip 文件?

例如:将 25 GB 的文件拆分为 5 个文件,每个文件大小为 5 GB --> archive1.zip, ..., archive5.zip。现在我想提取存档“archive1.zip”的数据,而无需再次创建 25 GB 的 zip 文件。

我知道有 zipsplit,但是它只能处理最大 2 GB 的文件,而我的文件最大可达 100 GB。

提前谢谢了

答案1

恐怕没有办法实现您的愿望。如果您有一个巨大的 zip 文件,您可以使用 将其拆分为许多较小的文件split,但这些文件将不是有效的.zip档案,也无法解压。压缩档案的格式需要有效的标头,而当您拆分档案时,您创建的子文件将没有它。

想象一下,这就像一把很长的螺丝刀。你可以把它切成更小的部分,但只有带有螺丝刀头的部分才能用作螺丝刀。你不能只挑选中间的部分,然后期望它能用作小螺丝刀。

恐怕您别无选择,只能重新创建巨大的 .zip 文件并将其提取出来。

答案2

如何将 zip 文件拆分成更小的 zip 文件

Linux 中有一个通用命令,叫做分裂。它支持扩展和最大大小甚至最大行数选项:

   -a, --suffix-length=N
          generate suffixes of length N (default 2)

   --additional-suffix=SUFFIX
          append an additional SUFFIX to file names

   -b, --bytes=SIZE
          put SIZE bytes per output file

   -C, --line-bytes=SIZE
          put at most SIZE bytes of records per output file

   -d     use numeric suffixes starting at 0, not alphabetic

   -l, --lines=NUMBER
          put NUMBER lines/records per output file

为了把它们组合在一起,你可以简单地举cat3 个例子:

cat f1 f2 f3 > original.zip
cat dir/* > original.zip
for file in *; do cat $file >>original.zip; done

现在我想提取档案“archive1.zip”的数据,而无需再次创建 25 GB 的 zip 文件。

unzip -l ARCHIVE_NAME将列出 zip 中的文件。这将对整个 zip 进行操作以提取 1 个文件:

unzip -j file.zip "dir/in/archive/file.txt" 

并将在当前目录中恢复“dir/in/archive/file.txt”。我还没有看到这在 zip 文件的一部分上起作用的证据。然后这将是一个命中/未命中的情况:该文件可能部分位于前一部分和后一部分内。我怀疑如果不重新创建文件,这是否可行;但这可以“即时”完成。

相关内容