martes, 28 de mayo de 2013

Abrir directorio con Perl Linux

Muchas veces necesitamos abrir un directorio desde Perl para un script o un programa,esto lo podemos hacer desde las funciones de perl con los comandos opendir,readdir y closedir.

Bien,primero que nada para abrir un archivo necesitamos decir la carpeta que vamos a usar,en este caso vamos a definir el usuario así:

my $user = getlogin();

Ahora el Directorio,por ejemplo nuestro Home:

my $dir = "/home/" . $user;

Ahora vamos a abrir el directorio con la función opendir:

Definimos una variable que usaremos para leer el directorio,en este caso $recorrer:

opendir(my $recorrer, $dir) || die "Error :( $! \n";  

Ahora iniciamos un bucle while para que recorra el directorio,usando la variable que creamos al abrir el directorio:

 while(readdir $recorrer) {  
 # Codigo  
 }  

Cuando terminemos de recorrer y usar el directorio lo cerramos con el comando:

closedir $recorrer;

Eso es todo,al recorrer con un bucle while los archivos del directorio los guarda en su recorrido en la variable especial $_ ,veamos un ejemplo de como guardar los datos de un directorio en dos arrays:

#!/usr/bin/env perl  
my $user = getlogin();  
my $dir = "/home/" . $user;  
my (@archivos,@dirs) = ((),()); # Creamos dos arrays vacios  
opendir(my $recorrer, $dir) || die "Error :( $! \n";  
while(readdir $recorrer)  
 {  
   if (-d $dir . "/" . $_) { # Vemos si es un directorio  
     push (@dirs,$_); # Si es asi llenamos el array de directorios  
   }  
   if (-f $dir . "/" . $_) { # Hacemos lo mismo con los archivos  
     push (@archivos,$_);  
   }  
 }  
=pod  
 Aclaraciones  
 $dir . "/" . $_ # concatenamos los archivos del directorio para poder saber de que archivo trata  
 -d # Es para saber si es un directorio  
 -f # Es para saber si es un archivo  
 push # Añade un valor a un array  
=cut  
closedir $recorrer;  
foreach my $files(@archivos) { # Recorremos los arrays  
   print "Archivos : $files\n";  
}  
foreach my $directorios(@dirs) {  
   print "Directorios : $directorios\n";  
} # O hacemos lo que queramos con ellos  



Otra forma de hacer esto es con el modulo DirHandle,veamos:

#!/usr/bin/perl  
use DirHandle;  
my $user = getlogin();  
my (@archivos,@dirs) = ((),()); # Creamos dos arrays vacíos  
my $dir = "/home/" . $user;  
$directorio = DirHandle->new("$dir"); # Definimos directorio  
while ($_ = $directorio->read) { # Lo leemos  
   if (-d $dir . "/" . $_) {  
     push (@dirs,$_);  
   }  
   if (-f $dir . "/" . $_) {  
     push (@archivos,$_);  
   }  
 }  
undef $directorio; # Indefinidos el valor para cerrar el archivo  
foreach my $files(@archivos) {  
   print "Archivos : $files\n";  
}  
foreach my $directorios(@dirs) {  
   print "Directorios : $directorios\n";  
}  

Bien,eso es todo,use foreach para recorrer el array,pero podemos usar for,while ademas de que podemos usar las funciones de array,pop,push,sort,etc.

Eso es todo :D

No hay comentarios.:

Publicar un comentario

Los comentarios serán revisados antes de ser publicados.