#!/usr/bin/perl -w # This script unpacks tarballs and zip files, and uncompresses .svgz files use strict; use File::Basename; use File::Find; use File::Path; use File::Spec::Functions; my $opt_debug = 1; # Executes program and returns error code sub main { my @search_dirs = (); foreach my $file (@ARGV) { if (-d $file) { push(@search_dirs, $file); } elsif (-f $file) { process_file($file) or warn "Could not process $file\n"; } } sub wanted { if (!-d) { return process_file($File::Find::name); } } if (@search_dirs) { find({ wanted => \&wanted, no_chdir => 0}, @search_dirs); } return 0; } sub process_file { my $filename = shift; my ($basename,$dir,$ext) = fileparse($filename, '\..*?'); $ext =~ s/^\.//; $filename = "$basename.$ext"; if (! -e $filename) { warn "File '$filename' does not appear to exist\n"; } elsif ($filename =~ /\.svgz$/) { print `gunzip -S svgz $filename`; } elsif ($filename =~ /\.tgz$/i or /\.tar.gz/i) { print `tar xzf $filename`; } elsif ($filename =~ /\.zip$/i) { eval { mkpath($basename, 1, 0755) }; if ($@ or ! -d $basename) { warn "Could not create directory '$basename': $@ - skipping '$filename'\n"; } else { print `unzip -d $basename $filename`; } } elsif ($filename =~ /\.tar.bz2$/i) { print `bunzip2 $filename`; print `tar xf $basename`; } else { warn "Skipping unknown file $filename\n" if $opt_debug>2; } } exit main();