[Triangulo-pm] Exemplo: Copiando arquivos
Adriano Ferreira
a.r.ferreira em gmail.com
Terça Fevereiro 13 03:27:38 PST 2007
Olá, Pessoal.
Depois de uma longa ausência, estou aqui de volta para fazer algum
tráfego nesta lista que, quem sabe, vira grupo de desenvolvedores Perl
algum dia.
O exemplo desta mensagem é bem curto e simples. Copiar arquivos
através de um shell (ou interpretador de comandos) é uma coisa
rotineira e simples.
> copy source target (para cmd.exe em Windows)
$ cp source target # para sistemas *nix
Dentro de uma aplicação Perl, a cópia de arquivos também é muito fácil
de ser feita. Há um módulo chamado File::Copy que é tudo o que
precisamos.
A documentação deste módulo está instalado junto com o seu
interpretador Perl e pode ser vista através do comando
$ perldoc File::Copy
O módulo faz parte da biblioteca padrão que vem com todo interpretador
Perl e portanto não precisa de nenhum procedimento de instalação além
daquele que você já fez para instalar Perl.
O exemplo de script a seguir recebe uma lista de nomes de arquivos
como argumento na linha de comando e faz o backup (cópia) de cada um
deles no diretório "bak".
#!/usr/bin/perl
die "Usage: $0 FILE..." unless @ARGV;
use File::Copy 'cp';
mkdir 'bak' unless -e 'bak';
die "'bak' is not a directory" unless -d 'bak';
for (@ARGV) {
print STDERR "copying $_... ";
cp $_, "bak/$_"
or warn "error: $!";
print STDERR "ok\n" unless $!;
}
Este conteúdo está no arquivo em anexo, "bak.pl". Na hora de usar, basta fazer
> perl bak.pl file1 file2
e o diretório "bak/" será criado no diretório corrente se não existir
e os arquivos dados como argumentos serão copiados para lá.
Há algumas diferenças entre usar um shell e o interpretador de
comandos Windows. Por exemplo,
$ perl bak.pl *.txt
funciona bem em um shell que fará a expansão do glob "*.txt" para nós.
Mas em Windows,
> perl bak.pl *.txt
copying *.txt... error: No such file or directory at bak.pl line 12.
No entanto, é muito fácil fazer uma pequena modificação neste programa
e fazer a expansão do glob no próprio programa Perl, tornando o script
ainda mais portável.
Alguém se arrisca a sugerir uma modificação para fazer isto?
Adriano Ferreira.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: bak.pl
Type: application/octet-stream
Size: 290 bytes
Desc: not available
Url : http://mail.pm.org/pipermail/triangulo-pm/attachments/20070213/2cb0902d/attachment.obj
Mais detalhes sobre a lista de discussão Triangulo-pm