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";