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