如何使用perl Archive :: Zip来递归遍历归档文件?

时间:2012-06-01 17:27:20

标签: perl archive

我有一个小的perl脚本,用于搜索存档以查找与名称匹配的成员。我想要增强这一点,以便如果它在档案中发现任何也是档案(zip,jar等)的成员,它将递归扫描那些,寻找原始的所需模式。

我查看了“Archive :: Zip”文档,我以为我看到了如何做到这一点。我注意到了“fh()”和“readFromFileHandle()”方法。但是,在我的测试中,似乎对归档成员的“fh()”调用返回包含存档的文件句柄,而不是成员。也许我做错了,但我很欣赏如何做到这一点的一个例子。

1 个答案:

答案 0 :(得分:1)

如果没有从存档文件中提取任何类型的存档成员(无论是文本,图片还是其他存档),您都无法读取它们。

一旦确定了要查看的成员,就必须调用extractMember(或者,如果该文件是临时文件,则更可能是extractMemberWithoutPaths)将其解压缩到磁盘文件中。然后,您可以创建新的Archive::Zip对象并read新文件,同时保持旧文件的打开状态。

一旦您对其内容进行了编目,您可能希望unlink存档文件。


修改

之前我没有遇到Archive::Zip::MemberRead模块。您似乎与readFromFileHandle走在了正确的轨道上。我猜它应该像这样工作,但我目前测试它会很尴尬。

my $zip = Archive::Zip->new;
$zip->read('myfile.zip');

my $zipfh  = Archive::Zip::MemberRead->new($zip, 'archive/path/to/member.zip');

my $newzip = Archive::Zip->new;
$newzip->readFromFileHandle($zipfh)