Beefy Boxes and Bandwidth Generously Provided by pair Networks
laziness, impatience, and hubris

Re^6: maddening system call gzip/gunzip problems

by neilwatson (Priest)
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

Log In?

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

How do I use this? | Other CB clients
Other Users?
Others taking refuge in the Monastery: (8)
As of 2016-10-22 16:15 GMT
Find Nodes?
    Voting Booth?
    How many different varieties (color, size, etc) of socks do you have in your sock drawer?

    Results (297 votes). Check out past polls.