X-Git-Url: https://git.jankratochvil.net/?a=blobdiff_plain;f=bin%2Fexx;h=a37132ddba677a4aa8005481b51665aff2d2884f;hb=a859f46406df67ca23459083b9ebabae49ac5692;hp=c81dafe347f96a01f1bfb1b430ccdc2345a4c504;hpb=2f472d340e661adb173b2bc2126dfb2561ce533c;p=nethome.git diff --git a/bin/exx b/bin/exx index c81dafe..a37132d 100755 --- a/bin/exx +++ b/bin/exx @@ -8,18 +8,20 @@ use warnings; use IO::Handle; use Cwd qw(chdir cwd); -use constant FORMAT_TAR_GZ=>'tar xzf $pathname;i=`echo *`;echo "$i"|grep -q " " || test * != $base ||' - .'(mv "$i" "$i".$$;(set +x;mv "$i".$$/* .);rmdir "$i".$$)'; +use constant FORMAT_TAR=>'tar xf $pathname;i=`echo *`;echo "$i"|grep -q " " || test * != $base ||' + .'(mv "$i" "$i".$$;(set +x;mv "$i".$$/* .);rmdir "$i".$$)'; use constant FORMATS=>{ "rpm" =>'rpm2cpio $pathname|cpio -id --quiet', #-v #FIXME: --sparse doesn't work, why? "zip" =>'unzip -Lq $pathname', + "jar" =>'unzip -Lq $pathname', "a" =>'ar x $pathname', "deb" =>'ar x $pathname;' .'for i in *.tar.gz;do j=`basename $i .tar.gz`;mkdir -p $j;cd $j;tar xzf ../$i;cd ..;rm -f $i;done', "arj" =>'unarj x $pathname', - "tar.gz" =>FORMAT_TAR_GZ, + "tar" =>FORMAT_TAR, + "tar.gz" =>do { $_=FORMAT_TAR; s/xf/xzf/; $_; }, "tgz" =>"tar.gz", - "tar.bz2"=>do { $_=FORMAT_TAR_GZ; s/xzf/xjf/; $_; }, + "tar.bz2"=>do { $_=FORMAT_TAR; s/xf/xjf/; $_; }, "tar.bz" =>"tar.bz2", "tbz" =>"tar.bz", }; @@ -32,13 +34,12 @@ my $origdir=cwd; for my $fname (@ARGV) { my @parsed; for my $fmt (sort { length $b<=>length $a; } keys %{+FORMATS}) { - (my $fmtt=$fmt)=~s/(\W)/\\$1/g; - last if @parsed=$fname=~m#^(.*?)([^/]+)([.=])($fmtt)$#i; + last if @parsed=$fname=~m#^(.*?)([^/]+)([.=])(\Q$fmt\E)$#i; } $parsed[3] or die "Extension not found for archive: $fname"; my($path,$base,$ext)=@parsed[0,1,3]; my($pathname)=($parsed[2] eq "=" ? "$path$base" : $fname); - my($cmdtry,$cmd)=($ext); + my($cmdtry,$cmd)=(lc $ext); do { $cmd=$cmdtry; $cmdtry=FORMATS->{$cmdtry};