Perl: Leer directorios del sistema
A veces es necesario leer un listado de nombres de archivos desde un directorio específico.
A continuación un ejemplo que recibe como parámetro desde la línea de comandos una ruta de directorio y muestra en pantalla un listado de los archivos y directorios que se encuentran dentro.
Tiene una característica especial, dado que mostrará solamente los archivos con extensión .txt. Este ejemplo puede ser fácilmente adaptado o otras tareas.
-------------------------------------------- CORTAR AQUI -------------------------------------------------------
#!/usr/bin/perl use 5.006; use strict; use warnings; ####################################################### # Recupera los nombres de archivos y directorios dentro de una ruta # especifica escrita desde la linea de comandos ####################################################### my $directorio="/home/"; my $archivo; if ($#ARGV==-1) { #sin parametros exit } else { $directorio=$ARGV[0]; opendir DH,$directorio or die "no se puede abrir el directorio: $!"; foreach $archivo (readdir DH){ #busca archivos .txt #comentar el if si se desea tener un listado completo del directorio # if ($archivo=~ /\.txt/){ print "$archivo \n"; # } }#foreach closedir DH; }
-------------------------------------------- CORTAR AQUI -------------------------------------------------------
Muchas Gracias.
ResponderEliminar:)
ResponderEliminarBuenísimo, me sirvió un montón, ahora me surge una duda. Supongamos que uso expresiones regulares para abrir un archivo especifico.
ResponderEliminarTengo los archivos *.txt de la siguiente manera.
ID1-fecha-.txt
ID2-fecha-.txt
ID3-fecha-.txt
Me ingresan por STDIN el numero para abrir el archivo, pero no encuentro manera de hacerlo. Probé lo siguiente:
@lista = readdir(DIR);
foreach $file (@lista) {
if ($file=~/ID$palabra._/){ #o /ID.$pa
print "$file \n";
}
close(DIR);
Pero no me funciona.
Saludos
Por las dudas, escribí mal el formato de los nombres, serían algo así:
EliminarID1_fecha-.txt
ID2_fecha-.txt
ID3_fecha-.txt
Por eso el /ID.$palabra._/
$palabra serían lo que me ingresan por STDIN.
Hola amigo, ante todo gracias por el feedback del artículo, realmente estoy volviendo a activar el blog. Al momento, te podría decir que coloques el nombre del archivo por la entrada estándar, pero tengo que probar. Saludos.
Eliminar