我有一个小的 perl 脚本,用于在档案中搜索匹配名称的成员。我想增强这一点,以便如果它在档案中找到任何也是档案(zip、jar 等)的成员,它将递归地扫描这些,寻找原始所需的模式。
我浏览了“Archive::Zip”文档,我想我知道如何做到这一点。我注意到“fh()”和“readFromFileHandle()”方法。但是,在我的测试中,对存档成员的“fh()”调用似乎返回了包含存档的文件句柄,而不是成员。也许我做错了,但我会很感激一个如何做到这一点的例子。
如果不从存档文件中提取,您将无法读取任何类型的存档成员(无论是文本、图片还是其他存档)的内容。
一旦您确定了要查看的成员,您必须调用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)