Linux slogan
Visite também: Segurança Linux · BR-Linux.org · Dicas-L · Doode · NoticiasLinux · SoftwareLivre.org · UnderLinux



» Screenshot
Linux: Blackbox, gkrellm,etc
Por slackrlz
» Login
Login:
Senha:

Se você ainda não possui uma conta, clique aqui.

Esqueci minha senha


Dica

Trabalhando com arquivos em Perl (parte 2)
Linux user
Publicado por C00L3R_ em 06/11/2008

Login: Cooler_, 251042 pontos | Blog: http://bugsec.com.br
[ Hits: 4287 ]

Trabalhando com arquivos em Perl (parte 2)

Continuando o artigo Trabalhando com arquivos no Perl, aqui estarei mostrando como ler conteúdo de diretórios, remover árvores de diretórios em massa, copiar, renomear etc.

Vamos iniciar lendo o conteúdo de um arquivo local:

#!/usr/bin/perl
use File::Basename;
print "analisando local\n";
@list = <*>;
@list = glob("*");
foreach (@list) {
print "$_\n";
}

Pegamos dados do usuário:

print "Qual diretório deseja ver arquivos em perl \?\n";
chomp($arquivo=<STDIN>);

Abrindo um diretório e analisando seu conteúdo:

opendir(DIR, $arquivo);

Aqui pegamos os dados de dentro de um diretório de forma simples, se quisermos retirar apenas arquivos em "Perl", usaremos com uma regex simples "@files = grep { /\.pl$/ } readdir(DIR);", desta forma dentro do array ficarão apenas os arquivos com extensão ".pl", mas no exemplo vamos listar todos os elementos do diretório escolhido pelo usuário.

@files = readdir(DIR);

Usamos sort para organizar por ordem alfabética.

@alfa=sort(@files);
closedir(DIR);
foreach (@alfa) { print "$_\n"; }

Bacana, também podemos usar para renomear um array de arquivos inteiros:

foreach $file (@NAMES) {
   my $newname = $file;
   change $newname
   rename($file, $newname) or warn "não foi possível renomear  $file para $newname: $!\n";
}

Outra coisa interessante seria fazer o Perl nos dizer o que é diretório e o que não é usando basename:

use File::Basename;
$path = '/home/Cooler/ola.pl';
$file = basename($path);
$dir = dirname($path);
print "é diretório $dir, é arquivo $file\n";

Outra coisa bacana para se usar, por exemplo, você tem que remover um diretório e os arquivos dentro, tipo o comando do Unix "rm -r", só que em Perl. Daí podemos fazer:

#!/usr/bin/perl
use File::Find qw(finddepth);
print "Qual pasta a ser deletada todo conteúdo dela sera deletado também\n";
chomp($pasta=<STDIN>);
*name = *File::Find::name;
finddepth \&killer, $pasta;
sub killer {
   if (!-l && -d _) {
      print "rmdir $name\n";
      rmdir($name)  or warn "não foi possível remover diretório $name: $!";
   }
   else {
      print "unlink $name";
      unlink($name) or warn "não foi possível remover arquivo $name: $!";
  
   }
}

Vamos para outro exemplo mais simples e com a mesma função do anterior (remover):

use File::Path;
print "Qual diretório para remover \?\n"; chomp($pasta=<STDIN>);
   foreach $dir ($pasta) {
   rmtree($dir);
}

Agora só faltou o copy, vou dar um exemplo de uso dele:

use File::Copy;
copy("datafile.dat", "datafile.bak") or die "falha na copia: $!";
move("datafile.new", "datafile.dat") or die "falha na copia: $!";

Ele apenas copia um arquivo, você também pode usar outras funções.

Bem fico com o tutorial por aqui, espero ter ajudado pessoal aí do boteco.


Outras dicas deste autor

Leitura recomendada
   Dica Linux recomendada Seu mouse corre para o canto da tela e trava?
   Dica Linux recomendada Scripts úteis
   Dica Linux recomendada Cinnamon - Fork no Gnome 3 no Arch e no KahelOS
   Dica Linux recomendada DL0003 - LPIC-1 - Prova 101 - Continuando o tópico 101: Arquitetura de Sistema
   Dica Linux recomendada Convertendo Vídeos de formato .TRP para outros formatos

Comentários
Nenhum comentário foi encontrado.

Contribuir com comentário


  
Para executar esta ação você precisa estar logado no site, caso contrário, tudo o que for digitado será perdido.
Responsável pelo site: Fábio Berbert de Paula - Conteúdo distribuído sob licença GNU FDL
Site hospedado por:

Viva o Linux

A maior comunidade Linux da América Latina! Artigos, dicas, tutoriais, fórum, scripts e muito mais. Ideal para quem busca auto-ajuda em Linux.