- 论坛徽章:
- 0
|
#by jim_zhang @ 2007
my $file = $ARGV[0];
die "[Fatal Error:]Input file should be the absolute path/your file\n" if($file !~ /^\//);
my $refiles; ### this is the global ref for array to store .tar,.jar,.tar.gz files.
if( ! is_ar($file) && ! is_tar_gz($file) ){
die "the file is not a tar/jar/tar.gz file\n";
}else{
unzipfile($file);
}
#whether the file is jar file
sub is_ar
{
my $name = shift;
if($name =~ /\.[j,t]ar$/){
return 1;
}else{
return 0;
}
}
sub is_tar_gz
{
my $name = shift;
if($name =~ /\.tar\.gz$/){
return 1;
}else{
return 0;
}
}
sub get_dir
{
my $name = shift;
$name=~/(.*\/)(.*)$/;
return ($1,$2);
}
sub unzipfile
{
my $name = shift;
my ($cd_dir,$zipfile) = get_dir($name);
my $current_dir = `pwd`;
if (is_ar($name) or is_tar_gz($name) )
{
$name =~ /(.*?)\.[t,j]ar[\.gz]?/;my $after = $1;
if ($name =~ /\.tar$/){
print "Running cd $cd_dir;tar xf $name; cd $current_dir \n";
chdir($cd_dir);
system ("tar xf $name");
chdir($current_dir);
}
if ($name =~ /\.jar$/){
print "Running cd $cd_dir;unzip xf $name; cd $current_dir \n";
chdir($cd_dir);
system ("unzip $name -d $after");
chdir($current_dir);
}
if (is_tar_gz($name)) {
print "Running cd $cd_dir; gunzip -c $zipfile | tar xf -; cd $current_dir\n";
chdir($cd_dir); system ("gunzip -c $zipfile | tar xf -"); chdir($current_dir);
}
my $all_files = read_dir($after);
for (@$all_files)
{
print "current : @$all_files\n.";
shift @$all_files;
unzipfile ($_);
}
}
else
{
print "This is not an tar/jar/gz file\n";
return;
}
}
#get all files(.tar,.jar,.tar.gz) in one directory
sub read_dir
{
my $path=shift;
my @files;
opendir(THISDIR,$path);
@files=readdir THISDIR;
closedir THISDIR;
for(@files)
{
next if(/^\./);
#next if(! is_ar($_) );
#next if(! is_tar_gz($_) );
if(-d $path.'/'.$_)
{
read_dir($path.'/'.$_);
}else
{
push @$refiles, $path.'/'.$_ if(is_ar($_) or is_tar_gz($_));
}
}
return $refiles;
}
|
|
[ 本帖最后由 systemalgorithm 于 2007-9-30 10:42 编辑 ] |
|