equal
  deleted
  inserted
  replaced
  
    
    
|         |      1 #! /usr/bin/perl | 
|         |      2  | 
|         |      3 use 5.010; | 
|         |      4 use strict; | 
|         |      5 use warnings; | 
|         |      6 use POSIX qw(strftime); | 
|         |      7 use autodie qw(:all); | 
|         |      8 use File::Basename; | 
|         |      9 use File::Temp; | 
|         |     10 use IO::Compress::Gzip qw(gzip $GzipError :level :strategy); | 
|         |     11 use IO::Uncompress::Gunzip qw(gunzip $GunzipError); | 
|         |     12 use Hash::Util qw(lock_keys); | 
|         |     13 use Getopt::Long; | 
|         |     14 use Pod::Usage; | 
|         |     15 use File::Find; | 
|         |     16  | 
|         |     17 use constant THRESHOLD => 0.90; | 
|         |     18 use constant LEVEL => Z_BEST_SPEED; | 
|         |     19  | 
|         |     20  | 
|         |     21 local $/ = undef; | 
|         |     22  | 
|         |     23 die if not @ARGV; | 
|         |     24  | 
|         |     25 find(sub { | 
|         |     26     say and return if -d; | 
|         |     27     return if not -f; | 
|         |     28  | 
|         |     29     open(my $fh, $_); | 
|         |     30     my ($buffer, $zbuffer); | 
|         |     31     my ($tmp); | 
|         |     32  | 
|         |     33     if (/\.gz$/ ) {  | 
|         |     34 	$zbuffer = <$fh>; | 
|         |     35 	gunzip(\$zbuffer => \$buffer) | 
|         |     36 	    or die $GunzipError; | 
|         |     37  | 
|         |     38 	return if length($zbuffer)/length($buffer) < THRESHOLD; | 
|         |     39  | 
|         |     40 	$tmp = File::Temp->new(DIR => ".", TEMPLATE => ".tmp-XXXXXX"); | 
|         |     41 	print {$tmp} $buffer; | 
|         |     42 	rename $tmp->filename => basename($_, ".gz"); | 
|         |     43 	 | 
|         |     44     } | 
|         |     45     else { | 
|         |     46 	$buffer = <$fh>; | 
|         |     47 	gzip(\$buffer => \$zbuffer, | 
|         |     48 	    -Minimal => 1, | 
|         |     49 	    -Level => Z_BEST_SPEED, | 
|         |     50 	    -Strategy => Z_FILTERED | 
|         |     51 	) or die $GzipError; | 
|         |     52 	return  if length($zbuffer)/length($buffer) >= THRESHOLD; | 
|         |     53  | 
|         |     54 	$tmp = File::Temp->new(DIR => ".", TEMPLATE => ".tmp-XXXXXX"); | 
|         |     55 	print {$tmp} $zbuffer; | 
|         |     56 	rename $tmp->filename => "$_.gz"; | 
|         |     57     } | 
|         |     58  | 
|         |     59     say; | 
|         |     60  | 
|         |     61     close $tmp; | 
|         |     62     unlink $tmp, $_; | 
|         |     63  | 
|         |     64     return; | 
|         |     65  | 
|         |     66  | 
|         |     67 }, @ARGV); | 
|         |     68  |