有没有办法将 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
为了把它们组合在一起,你可以简单地举cat
3 个例子:
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 文件的一部分上起作用的证据。然后这将是一个命中/未命中的情况:该文件可能部分位于前一部分和后一部分内。我怀疑如果不重新创建文件,这是否可行;但这可以“即时”完成。