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

标签 perl archive

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

我浏览了“Archive::Zip”文档,我想我知道如何做到这一点。我注意到“fh()”和“readFromFileHandle()”方法。但是,在我的测试中,对存档成员的“fh()”调用似乎返回包含存档的文件句柄,而不是成员。也许我做错了,但我希望有一个如何做到这一点的例子。

最佳答案

如果不从存档文件中提取内容,则无法读取任何类型的存档成员的内容(无论是文本、图片还是其他存档)。

确定要查看的成员后,必须调用 extractMember(或者,更可能的是,如果文件是临时文件,则调用 extractMemberWithoutPaths)来提取它到磁盘文件。然后,您可以创建一个新的 Archive::Zip 对象并读取新文件,同时保持旧文件打开。

在对存档文件的内容进行编目后,您可能会想要取消链接存档文件。

<小时/>

编辑

我没有遇到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)

关于perl - 如何使用 perl Archive::Zip 递归地遍历存档文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10854809/

相关文章:

regex - 如何从模块中导出正则表达式

python - BitTorrent 跟踪器 API 不错吗?

perl - 为什么 `sort List::Util::uniq(BAR, BAZ);` 与 `sort &List::Util::uniq(BAR, BAZ);` 不同

git - 仅在 Git 中导出/归档更改的文件

.net - 归档平面文件的理想选择

java - 使用 java 的高效 LZ4 多文件压缩

perl - 如何在 perl oneliner 中进行无缓冲替换?

Perl:flock() 在 Linux 上运行,忽略之前在 AIX 上的锁定

python - .7z 文件是否有等效的 gzip.open()?

linux - 供 Unix 使用的随机访问存档