Вот скрипт 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
person
Birei
schedule
20.05.2013