s i s t e m a o p e r a c i o n a l m a g n u x l i n u x | ~/ · documentação · suporte · sobre |
Página seguinte
Página anterior
Índice
50. Usando o bzip2 para compactar novamente outros formatosO seguinte programa em perl recebe arquivos compactados em outros formatos (.tar.gz, .tgz. .tar.Z e .Z) e os empacota para uma melhor compactação. O fonte em Perl está documentado.
#!/usr/bin/perl -w ######################################################## # # # Este programa recebe programas compactados e gzipados# # no diretório atual e transforma-os no formato bzip2. # # Ele maneja a extensão .tgz de uma forma razoável, # # produzindo um arquivo .tar.bz2. # ######################################################## $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 "Reempacotando $_ ($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 é $factor% do tamanho de $_. :",($factor<100)?')':'(',"\n"; unlink $_; } else { print "Algo aconteceu com $_: $!\n"; } } print "Foram economizados ", ($saved_bytes>=0)?"economizados":"perdidos", " $saved_bytes bytes de espaço de armazenamento :", ($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 "Não foi possível abrir o arquivo: $!"; $machine_bzip2_total += $saved_bytes; print TOTAL $machine_bzip2_total; close TOTAL; print "Total de ",`cat $totals_file`," bytes economizados.\n";
Página seguinte Página anterior Índice |