Page suivante Page pr�c�denteTable des mati�res

9. Utiliser bzip2 pour recompresser en remplacement d'autres formats de compression

Ce programme perl prend les fichiers compress�s dans d'autres formats (.tar.gz, .tgz. .tar.Z, et .Z pour cette it�ration) et les recompresse pour un meilleur r�sultat. Le source perl dispose de tous les types de documentation n�cessaires sur ce qu'il fait et comment il fait ce qu'il fait. Cette derni�re version prend les fichiers sur la ligne de commande. Sans argument en ligne de commande, il tente de recomprimer tous les fichiers du r�pertoire courant.

#!/usr/bin/perl -w
#######################################################
#                                                     #
# Ce programme prend les fichiers compress�s et       #
# gzip-�s dans le r�pertoire courant et les tranforme #
# en fichiers bzip2. Il supporte proprement           #
# l'extension .tgz, produisant un fichier .tar.bz2.   #
#                                                     #
#######################################################
$counter = 0;
$saved_bytes = 0;
$totals_file = '/tmp/machine_bzip2_total';
$machine_bzip2_total = 0;
@raw = (defined @ARGV)?@ARGV:<*>;
foreach(@raw) {
 next if /^bzip/;
 next unless /\.(tgz|gz|Z)$/;
 push @files, $_;
}
$total = scalar(@files);
foreach (@files) {
 if (/tgz$/) {
 ($new=$_) =~ s/tgz$/tar.bz2/;
 } else {
 ($new=$_) =~ s/\.g?z$/.bz2/i;
 }
 $orig_size = (stat $_)[7];
 ++$counter;
 print "Recompacte $_ ($counter/$total)...\n";
 if ((system "gzip -cd $_ |bzip2>$new") == 0) {
 $new_size = (stat $new)[7];
 $factor = int(100*$new_size/$orig_size+.5);
 $saved_bytes += $orig_size-$new_size;
 print "$new is about $factor% of the size of $_. :",($factor<100)?')':'(',"\n";
 unlink $_;
 } else {
 print "Arrgghh! Quelque chose est arriv� � $_: $!\n";
 }
}
print "Vous avez "
 , ($saved_bytes>=0)?"sauv� ":"perdu "
 , abs($saved_bytes)
 , " octets d'espace disque :"
 , ($saved_bytes>=0)?")":"("
 , "\n"
 ;
unless (-e '/tmp/machine_bzip2_total') {
 system ('echo "0">/tmp/machine_bzip2_total');
 system ('chmod', '0666', '/tmp/machine_bzip2_total');
}
chomp($machine_bzip2_total = `cat $totals_file`);
open TOTAL, ">$totals_file"
 or die "Ne peut ouvrir le total sur tout le syst�me: $!";
$machine_bzip2_total += $saved_bytes;
print TOTAL $machine_bzip2_total;
close TOTAL;
print "Ceci nous donne un total de ",`cat $totals_file`," octets sauv�s sur
tout le syst�me.\n";


Page suivante Page pr�c�denteTable des mati�res

Hosting by: Hurra Communications GmbH
Generated: 2007-01-26 18:01:16