bin/imager.compress
changeset 63 e6b2c98df64a
parent 62 24b1c19790bb
child 64 42a046de4cea
equal deleted inserted replaced
62:24b1c19790bb 63:e6b2c98df64a
    21 local $/ = undef;
    21 local $/ = undef;
    22 
    22 
    23 die if not @ARGV;
    23 die if not @ARGV;
    24 
    24 
    25 find(sub {
    25 find(sub {
    26     say and return if -d;
    26     say "dir $_" and return if -d;
    27     return if not -f;
    27     return if not -f;
    28 
    28 
    29     open(my $fh, $_);
    29     open(my $fh, $_);
    30     my ($buffer, $zbuffer);
    30     my ($buffer, $zbuffer);
    31     my ($tmp);
    31     my ($tmp);
    38 	return if length($zbuffer)/length($buffer) < THRESHOLD;
    38 	return if length($zbuffer)/length($buffer) < THRESHOLD;
    39 
    39 
    40 	$tmp = File::Temp->new(DIR => ".", TEMPLATE => ".tmp-XXXXXX");
    40 	$tmp = File::Temp->new(DIR => ".", TEMPLATE => ".tmp-XXXXXX");
    41 	print {$tmp} $buffer;
    41 	print {$tmp} $buffer;
    42 	rename $tmp->filename => basename($_, ".gz");
    42 	rename $tmp->filename => basename($_, ".gz");
       
    43 	say "uncompressed $_";
    43 	
    44 	
    44     }
    45     }
    45     else {
    46     else {
    46 	$buffer = <$fh>;
    47 	$buffer = <$fh>;
    47 	gzip(\$buffer => \$zbuffer,
    48 	gzip(\$buffer => \$zbuffer,
    52 	return  if length($zbuffer)/length($buffer) >= THRESHOLD;
    53 	return  if length($zbuffer)/length($buffer) >= THRESHOLD;
    53 
    54 
    54 	$tmp = File::Temp->new(DIR => ".", TEMPLATE => ".tmp-XXXXXX");
    55 	$tmp = File::Temp->new(DIR => ".", TEMPLATE => ".tmp-XXXXXX");
    55 	print {$tmp} $zbuffer;
    56 	print {$tmp} $zbuffer;
    56 	rename $tmp->filename => "$_.gz";
    57 	rename $tmp->filename => "$_.gz";
       
    58 	say "  compressed $_";
    57     }
    59     }
    58 
       
    59     say;
       
    60 
    60 
    61     close $tmp;
    61     close $tmp;
    62     unlink $tmp, $_;
    62     unlink $tmp, $_;
    63 
    63 
    64     return;
    64     return;