这是一个perl
脚本,它将列出所有文件,包括递归zip
和tar
文件:
#!/usr/bin/env perl
use strict;
use warnings;
use Archive::Extract;
use File::Temp;
my ($indent) = (0);
die qq|Usage: perl $0 <zip-file>\n| unless @ARGV == 1;
printf qq|%s\n|, $ARGV[0];
$indent += 2;
recursive_extract( shift );
exit 0;
sub recursive_extract {
my ($file) = @_;
my $tmpdir = File::Temp->newdir;
my $ae = Archive::Extract->new(
archive => $file,
);
$ae->extract( to => $tmpdir->dirname );
for my $f ( @{ $ae->files } ) {
printf qq|%s%s\n|, q| | x $indent, $f;
if ( $f =~ m/\.(?:zip|tar)\z/ ) {
$indent += 2;
recursive_extract( $f );
}
}
$indent -= 2;
}
一些缺点:它不会缓存已经处理过的文件,所以如果有相同的压缩文件,它会提取并再次读取它们。它会搜索压缩文件,仅查看其扩展名,而不是其内容。因此,对于任何需要或想要它的人来说,它都可以得到改进。
假设以下脚本被命名script.pl
,将zip
文件作为参数,运行它:
perl script.pl myzip.zip
在我的测试中,它产生如下内容:
myzip.zip
f1
f2
f3
f4
mytar.tar
f5
f6
f7
f8
testtar.tar
f11
f12
f13
f14
testtar.tar
f11
f12
f13
f14
testzip.zip
fd
fd2