Beefy Boxes and Bandwidth Generously Provided by pair Networks
Your skill will accomplish
what the force of many cannot
 
PerlMonks  

Re^6: maddening system call gzip/gunzip problems

by neilwatson (Curate)
on Dec 07, 2006 at 20:13 UTC ( #588454=note: print w/ replies, xml ) Need Help??


in reply to Re^5: maddening system call gzip/gunzip problems
in thread maddening system call gzip/gunzip problems

Great answer. Thank you (and thank you to all who added their two cents). I solved this by using two loops. One to create the file list and the second to go through the list and issue the system commands for each item.

sub gzip { my $cmd = shift; my $dir = shift; my ($file, $fullfile); my @files = (); print "$cmd files in $dir...\n"; # Make sure command is secure and predictable. if ( $cmd eq 'zip' ){ $cmd = 'gzip'; } elsif ( $cmd eq 'unzip' ){ $cmd = 'gunzip'; } else { warn "zip or unzip command not given $!"; } # Generate list of files opendir DIR, $dir or warn "Cannot open $dir $!"; while ( defined ( $file = readdir(DIR) ) ){ $fullfile = "$dir/$file"; next if ( !-f $fullfile || $file =~ m/\.txt$/ || $file !~ m/^[\w-]+(\.[\w-]+)*$/ ); push @files, $fullfile; } closedir DIR; # Using file list from above, issue zip or unzip command. You can +not do # both in the same loop as the readdir may pickup the newly create +d files # and try to process them. Thus you may endup to zipping a zipped + file or # unzipping an upzipped file. while (<@files>) { system ( "$cmd $_") == 0 or warn "Cannot $cmd $fullfile : $!"; } }

Neil Watson
watson-wilson.ca


Comment on Re^6: maddening system call gzip/gunzip problems
Download Code

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://588454]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others about the Monastery: (10)
As of 2014-11-24 12:51 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    My preferred Perl binaries come from:














    Results (141 votes), past polls