如何使用Perl的Archive::Tar打包大于物理内存的文件?

6
我正在使用Perl的Archive::Tar模块。问题在于它会将所有文件都加载到内存中,然后进行归档,最后再写入文件系统,因此有关可以归档的最大文件大小存在限制。大多数情况下,它会提示内存不足。而GNU tar则会取一部分文件,对其进行归档,并将其写入内存中,因此它可以处理任何大小的文件。我该如何使用Perl的Archive::Tar模块来实现这一点。
2个回答

12

看起来 Archive::Tar::Wrapper 是您最好的选择。我自己没有尝试过,但它使用系统的 tar 可执行文件,并且不会在内存中保留文件。

与 Chas. Owen 的回答相反,Archive::Tar::Streamed 在内存中保留文件,并且 不会 使用系统的 tar。实际上,它在内部使用 Archive::Tar,但是对每个文件进行单独处理(利用 tar 存档可以连接的特性)。这意味着 Archive::Tar::Streamed 可以处理比内存更大的档案,只要档案中的每个单独文件适合内存即可。但这不是您所要求的。


我认为对于一些人来说,主要的缺点是Wrapper类在Windows下无法工作,如果我没有弄错的话,因为它没有命令行tar函数。在这种情况下,Streamed是更好的选择。 - Bram Vanroy

6

看起来有一个不使用内存结构的不同模块:Archive::Tar::Streamed。缺点是需要在运行该模块的系统上可用tar。尽管如此,这仍比手动操作tar要好。


Archive::Tar::Streamed 的文档中提到:“它还旨在具有可移植性,并可在没有本地 tar 的平台上使用”。由于您的回答已被接受,您可能希望更新它。 - Borodin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接