Ovaj perl program uzima datoteke sažete u drugim formatima (.tar.gz,
.tgz, .tar.Z i .Z za ovu iteraciju) i ponovno ih sažima radi
bolje kompresije. Izvorni kod ima dosta zgodne dokumentacije o tome što radi
i kako to radi.
#!/usr/bin/perl -w
#######################################################
# #
# Ovaj program uzima compress-ane i gzip-ane datoteke #
# u trenutnom direktoriju i pretvara ih u bzip2 #
# format. S nastavkom .tgz ponaša se razumno, #
# stvarajući .tar.bz2 datoteku. #
# #
#######################################################
$brojač = 0;
$bajta_snimljeno = 0;
$ukupno_datoteka = '/tmp/bzip2_ukupno_na_stroju';
$bzip2_ukupno_na_stroju = 0;
while(<*[Zz]>) {
next if /^bzip2-0.1pl2.tar.gz$/;
push @files, $_;
}
$ukupno = scalar(@files);
foreach (@files) {
if (/tgz$/) {
($novo=$_) =~ s/tgz$/tar.bz2/;
} else {
($novo=$_) =~ s/\.g?z$/.bz2/i;
}
$izv_koliko = (stat $_)[7];
++$brojač;
print "Ponovo sažimam $_ ($brojač/$ukupno)...\n";
if ((system "gzip -cd $_ |bzip2 >$novo") == 0) {
$novo_koliko = (stat $novo)[7];
$faktor = int(100*$novo_koliko/$izv_koliko+.5);
$bajta_snimljeno += $izv_koliko-$novo_koliko;
print "$novo zauzima oko $faktor% veličine $_. :",($faktor<100)?')':'(',"\n";
unlink $_;
} else {
print "Arrgg! Nešto se dogodilo s $_: $!\n";
}
}
print ($bajta_snimljeno>=0)?"Dobili":"Izgubili",
" ste $bajta_snimljeno bajta prostora na disku :",
($bajta_snimljeno>=0)?")":"(", "\n";
unless (-e '/tmp/bzip2_ukupno_na_stroju') {
system ('echo "0" >/tmp/bzip2_ukupno_na_stroju');
system ('chmod', '0666', '/tmp/bzip2_ukupno_na_stroju');
}
chomp($bzip2_ukupno_na_stroju = `cat $ukupno_datoteka`);
open UKUPNO, ">$ukupno_datoteka"
or die "Ne mogu otvoriti datoteku s ukupnim rezultatem stroja: $!";
$bzip2_ukupno_na_stroju += $bajta_snimljeno;
print UKUPNO $bzip2_ukupno_na_stroju;
close UKUPNO;
print "Ukupni rezultat cijelog stroja je ",`cat $ukupno_datoteka`," bajta.\n";