使用 perl 提取 tar.gz 文件时内存不足

Posted

技术标签:

【中文标题】使用 perl 提取 tar.gz 文件时内存不足【英文标题】:Out Of Memory while extracting tar.gz file using perl 【发布时间】:2013-05-07 05:43:10 【问题描述】:

我有一个大约 60 MB 的 tar.gz 文件,该文件里面有一个 XML 文件...在提取文件时我得到 Out Of Memory! 错误。 .. 下面是我用来提取文件的代码......

use strict;
use warnings;
use Archive::Extract;
$TAR_FILE_PATH = 'C:/Perl/IN/test_sample.tar.gz';
$WPARK_DIR = 'C:/Srinivas/Perl/WORK';
my $extract_obj = Archive::Extract->new(archive => $TAR_FILE_PATH, type => 'tgz');
$extract_obj->extract(to => $WORK_DIR);

在将 tar.gz 文件提取到 WORK_DIR 时,它在最后一行失败。有人可以建议一种最好的方法来处理这个问题并在 tar.gz 文件中提取巨大的 XML 文件..

【问题讨论】:

tar.gz 文件中的 XML 文件大小约为 800 MB .... 谁能帮我摆脱这个错误!!! 【参考方案1】:

Archive::Extract 模块可以使用纯 perl 解决方案或回退到系统调用。您可以设置 PREFER_BIN 以强制它使用内存占用较少的系统调用。

http://perldoc.perl.org/Archive/Extract.html#Supporting-Very-Large-Files

【讨论】:

以上是关于使用 perl 提取 tar.gz 文件时内存不足的主要内容,如果未能解决你的问题,请参考以下文章

bash:仅提取 tar.gz 存档的一部分

从 Ant tar 任务打包的 .tar.gz 中提取时包含非拉丁字符的文件名的编码

提取 tar 文件时用户/用户组无效

如何提取 filename.tar.gz 文件

使用 PHP,我如何识别(如果适用,解压缩)并从 .tar、.gz、.tar.gz、.zip 文件中提取文件?

如何从tar.gz包中,提取某些文件?