Perl-programmet nedenfor tar filer som komprimeres i andre format (for øyeblikket .tar.gz, .tgz. .tar.Z, og .Z) pakker de om til en bedre komprimering. Perl-koden har alle typer lekker dokumentasjon på hva den gjør og hvordan den gjør det den gjør
#!/usr/bin/perl -w
#######################################################
# #
# Dette programmet tar komprimerte og gzippede pro- #
# grammer i den aktuelle katalogen og gjør de om til #
# bzip2-format. Det håndterer .tgz-endelsen på en #
# grei måte og lager en .tar.bz2-fil #
# #
#######################################################
$counter = 0;
$saved_bytes = 0;
$totals_file = '/tmp/machine_bzip2_total';
$machine_bzip2_total = 0;
while(<*[Zz]>) {
next if /^bzip2-0.1pl2.tar.gz$/;
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 "Pakker om $_ ($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 er ca. $factor% av størrelsen på $_.
:",($factor<100)?')':'(',"\n"; unlink $_;
} else {
print "Arrgghh! Noe hendte med $_: $!\n";
}
}
print "Du har ",
($saved_bytes>=0)?"spart":"mistet",
" $saved_bytes bytes med lagringsplass :",
($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 "Kan ikke åpne global total: $!";
$machine_bzip2_total += $saved_bytes;
print TOTAL $machine_bzip2_total;
close TOTAL;
print "Det er en global total på ",`cat $totals_file`," bytes som
er spart.\n";