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";
Hosting by: Hurra Communications GmbH
Generated: 2007-01-26 18:01:16