【问题标题】:Untar tar.gz file using perl使用 perl 解压 tar.gz 文件
【发布时间】:2013-04-30 08:27:01
【问题描述】:

我有一个 tar.gz 文件,里面有一个巨大的 XML .. 我需要在 perl 中使用 Archive::tar 提取文件...我正在使用下面的代码,它只提取压缩的 XML 文件从 tar.gz 文件 .. 但我需要一步提取 XML ...... 我正在使用下面的代码...

 TAR__PATH= 'C:\\Perl\IN\Work\tar_file_20130426.xml.tar
 my $extract_obj = Archive::Extract->new(archive => $TAR_FILE_WORK_PATH, type => 'tar');

【问题讨论】:

  • 嗯..您想“使用”Archive::Tar,但您的代码 sn-p 使用 Archive::Extract
  • 你的代码 sn-p 不是有效的 perl。
  • 您的意思是您提取了 tarred XML 文件吗?在 tar.gz 中有一个压缩的 XML 文件是另一回事,而且非常不寻常。也应该可以在不先提取文件的情况下读取文件。您需要读取tar.gz 中的文件还是需要将其保存在磁盘上?编辑您的问题以澄清。

标签: xml perl tar


【解决方案1】:

使用下面的代码;

use Archive::Tar;

my $tar=Archive::Tar->new();

$tar->read('/path/of/tar/test.tar.gz');
$tar->extract();

它将提取当前路径中的内容。希望,它会工作。

【讨论】:

  • 感谢您的更新.. 我正在使用 Archive::Tar 但由于我试图解压缩一个巨大的 tar.gz 文件,它会抛出“内存不足!”消息..任何想法如何摆脱这个错误......
【解决方案2】:

如果是.xml,则放入tar.gz,这是使用Archive::Extract 的另一个实现。单线形式

perl -MArchive::Extract -e "Archive::Extract->new( archive => 'src/PPM-2.50_01.tar.gz' )->extract()"

源形式:

use Archive::Extract;

Archive::Extract->new( archive => 'src/PPM-2.50_01.tar.gz' )->extract();

【讨论】:

    【解决方案3】:

    你可能想要一个系统调用(反引号,因为它阻塞直到完成并给你结果)以 tar 作为 Archive::Tar 将整个存档加载到内存中

    类似的东西

    my $ret = `tar zxf $TAR_FILE_WORK_PATH`;
    

    然后检查 $ret 是否成功。

    您可以使用 -v(详细)选项获取更多输出以签入 $ret

    大多数 tar 命令都有一个 -C 选项来解压到指定目录,这也很有用。

    【讨论】:

    • 问题是“使用 perl”,虽然你有,但不包括分叉、启动 shell 和执行外部程序。当 tar 和 gzip 有多个 perl 实现时,这会加倍。
    • @hd1 大概自从我在 2013 年回答这个问题以来,时间已经过去了。你有更好的主意吗?
    • 是的,任何其他答案。
    猜你喜欢
    • 1970-01-01
    • 2013-04-27
    • 2011-11-01
    • 2018-06-26
    • 2013-04-29
    • 1970-01-01
    • 2019-06-14
    • 1970-01-01
    • 2011-10-30
    相关资源
    最近更新 更多