quinta-feira, maio 17, 2007

Comprimindo arquivos, sem trabalho...

Você que gosta de manter seus diretórios organizados, sem trabalho, e sem consumir espaço desnecessário pode usar alguma coisa deste estilo para ajudar:


#!/usr/bin/perl
use strict;
use warnings;
use File::Basename;
use File::Find;
use Archive::Tar;

foreach my $dir ( grep {-d} @ARGV ) {
( my $filename = basename $dir ) =~ s{[^a-zA-Z0-9_-]+}{_}og;
my $archive = Archive::Tar->new;
my @files;
find( sub { -f && push @files, $File::Find::name; }, $dir );
my @added = $archive->add_files( @files );
unless ( scalar @files == scalar @added ) {
# trouble, ignore and abort.
warn q{Trouble adding files to archive from $dir. Ignoring directory.};
next;
}
$archive->write( qq{$filename.tar.gz}, 9 );
}


Este programa vai encontrar diretórios passados como argumentos do programa, encontrar os arquivos sob este diretório, deduzir um nome "limpo" para o seu tarball, criar o arquivo, acrescentar os arquivos encontrados durante a busca e gravar o arquivo com compressão máxima.

Isto resolveu meu problema com as minhas fotografias armazenadas no meu host remoto em aproximadamente 10 minutos de trabalho (que inclui construir o script e colocá-lo para funcionar).

Nenhum comentário: