我使用下面的Perl代码列出tar存档中的文件.tar存档的大小总是大约15MB.
my $file = shift;
my $tar = Archive::Tar->new("$file");
my @lists = $tar->list_files;
$tar->error unless @lists;
Run Code Online (Sandbox Code Playgroud)
执行此代码会给出错误"Out of Memory".我的Linux系统中大约有512MB,我不想增加系统内存.任何人都可以建议我,如果可以修改此代码以获得更好的性能或其他代码列出tar存档中的文件.
归档::焦油慢吗?是的.它是纯粹的perl,所以它比你的/ bin/tar慢很多但是,它非常便携.如果速度是个问题,请考虑使用/ bin/tar.
Archive :: Tar的内存是否比/ bin/tar更重?是的,见上一个答案.由于Compress :: Zlib以及因此IO :: Zlib不支持在其文件句柄上进行搜索,因此除了将存档读入内存之外别无选择.如果要对存档进行内存中操作,则可以.
如果您只想提取,请改用extract_archive类方法.它将立即优化并写入磁盘.
另一个选择是使用iter类方法迭代tarball中的文件,而不是立即在内存中读取它们.
所以基于以上那么这应该是解决方案(未经测试):
my $next = Archive::Tar->iter( $file );
while ( my $f = $next->() ) {
say $f->name;
}
Run Code Online (Sandbox Code Playgroud)
/ I3az /
我在一个大焦油上尝试过,也遇到了错误。可能是库中的错误。以下对我有用:
@files = split/\n/, `tar tf $file`
Run Code Online (Sandbox Code Playgroud)