recursion地列出tar / zip档案的内容

我知道如何获得zip / tar文件的内容,例如: http : //www.if-not-true-then-false.com/2010/list-tar-tar-gz-tar-bz2-contents/

但在我的情况:我想获得一个zip档案的所有内容。

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

目标:我想要得到ABCD.zip的内容,以便我还能得到somezip.zip和someother.tar的更多内容,someother.tar也可能有其他一些拉链等。我怎样才能做到这一点与recursion? 可能用bash / perl脚本?

Solutions Collecting From Web of "recursion地列出tar / zip档案的内容"

这里是一个perl脚本,它将列出所有文件,包括通过ziptar文件递归:

 #!/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 

我写了一个Python脚本递归搜索档案,称为arkfind 。 您可以省略搜索文本,只是将所有内容列出到任意深度。

 $ arkfind ABCD.zip ABCD.zip > somefile.txt > somezip.zip > (contents of somezip.zip) > someother.tar > (contents of someother.tar)