我正在使用Perl的Archive::Tar模块。问题在于它会将所有文件都加载到内存中,然后进行归档,最后再写入文件系统,因此有关可以归档的最大文件大小存在限制。大多数情况下,它会提示内存不足。而GNU tar则会取一部分文件,对其进行归档,并将其写入内存中,因此它可以处理任何大小的文件。我该如何使用Perl的Archive::Tar模块来实现这一点。
看起来 Archive::Tar::Wrapper 是您最好的选择。我自己没有尝试过,但它使用系统的 tar
可执行文件,并且不会在内存中保留文件。
与 Chas. Owen 的回答相反,Archive::Tar::Streamed 会 在内存中保留文件,并且 不会 使用系统的 tar
。实际上,它在内部使用 Archive::Tar,但是对每个文件进行单独处理(利用 tar 存档可以连接的特性)。这意味着 Archive::Tar::Streamed 可以处理比内存更大的档案,只要档案中的每个单独文件适合内存即可。但这不是您所要求的。
看起来有一个不使用内存结构的不同模块:Archive::Tar::Streamed。缺点是需要在运行该模块的系统上可用tar。尽管如此,这仍比手动操作tar要好。
Archive::Tar::Streamed
的文档中提到:“它还旨在具有可移植性,并可在没有本地 tar 的平台上使用”。由于您的回答已被接受,您可能希望更新它。 - Borodin
tar
函数。在这种情况下,Streamed是更好的选择。 - Bram Vanroy