- 论坛徽章:
- 0
|
原帖由 systemalgorithm 于 2007-9-29 16:10 发表 ![]()
程序要求是:
unzip.pl input.tar.gz
input.tar.gz 文件里还有a.tar.gz;b.tar.gz文件; a.tar.gz文件里还有.tar, .jar文件。
这个程序的目的就是要把input.tar.gz文件里的所有可以解压的tar/jar/tar. ...
写了个, 测试下来暂时OK
use strict;
use warnings;
############# Main Begin ################
if ($ARGV[0]) {
&deep_unzip($ARGV[0]);
}
else {
print "Usage: DeepUnzip.pl 'file1' 'file2' 'filen'\n";
}
############# Main End ##################
### unzip the target recursively
sub deep_unzip {
my $target = shift;
if ($target =~ /\.jar$/i) {
print "jar -xf $target\n";
system("jar -xf $target");
$target =~ s/\.jar$//i;
}
elsif ($target =~ /\.tar$/i) {
print "tar -xf $target\n";
system("tar -xf $target");
$target =~ s/\.tar$//i;
}
elsif ($target =~ /\.tar\.gz$/i) {
print "gunzip -f $target\n";
system("gunzip -f $target");
$target =~ s/\.gz$//i;
print "tar -xf $target\n";
system("tar -xf $target");
$target =~ s/\.tar$//i;
}
# unzip the new files recursively
if (-d $target) {
print "cd $target\n";
chdir($target);
my @new_files = glob "*";
foreach (@new_files) {
&deep_unzip($_);
}
print "cd ..\n";
chdir('..');
}
}
|
如果一定需要is_ar和is_tar_gz的话, 这样就可以了:
### Check if it is .jar .tar
sub is_ar {
$_[0] =~ /\.[jt]ar$/i;
}
### Check if it is .tar.gz
sub is_tar_gz {
$_[0] =~ /\.tar\.gz$/i;
}
|
[ 本帖最后由 Lonki 于 2007-10-13 18:04 编辑 ] |
|