A simple, brute force script for handling various kinds of compressed .tar files as well as .zip files, and passing them on to the proper decompressor.
UPDATE: Added $! to the output from croak, thanks to tilly reminding me it could contain useful information about the system() call, and also fixed a bug where an error would never cause the program to die, due to the value of $? being negative on failure.
#!/usr/bin/perl -w
use strict;
use Carp;
(scalar @ARGV) || die "Usage: $0 file(s)\n";
foreach (@ARGV) {
if (/\.tar\.gz$|\.tgz$/) {
system "tar -zxvf $_"; error('tar') if ($? < 0);
}
elsif (/\.bz2$/) {
system "tar -Ixvf $_"; error('tar') if ($? < 0);
}
elsif (/\.z$/i) {
system "uncompress -dc | tar -xvf - "; error('uncompress') if
+($? < 0);
}
elsif (/\.zip$/) {
system "unzip $_"; error('unzip') if ($? < 0);
}
else {
warn "Don't know what to do with $_, moving on\n";
}
}
sub error {
my $call = shift;
croak "Error calling $call - $!\n";
}