2013-05-20 3 views
0

Я понимаю, как получить содержимое почтового индекса/битуминозные файлов, например: http://www.if-not-true-then-false.com/2010/list-tar-tar-gz-tar-bz2-contents/Рекурсивного список содержимого архива деготь/почтового

Но в моем случае: я хочу, чтобы получить все содержимое почтового архива.

ABCD.zip 
    -->somefile.txt 
    -->somezip.zip 
    -->someother.tar 

ЦЕЛЬ: Я хочу, чтобы получить содержание ABCD.zip так, что я также получить то, что дальше внутри somezip.zip и someother.tar и someother.tar могут также иметь некоторые другие застежки-молнии и т.д. Как могу ли я сделать это с рекурсией? Возможно, с сценарием bash/perl?

+2

Как получить суб-zip-файл во временную папку и очистить его потом? – albusshin

ответ

3

Здесь 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 
0

Я написал сценарий Python для рекурсивного поиска архивов, называемых arkfind. Вы можете опустить текст поиска, чтобы просто перечислить все содержимое на произвольную глубину.

$ arkfind ABCD.zip 
ABCD.zip 
    > somefile.txt 
    > somezip.zip 
     > (contents of somezip.zip) 
    > someother.tar 
     > (contents of someother.tar) 
Смежные вопросы