• Publicidad

Buscar dentro de carpetas y subcarpetas

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Buscar dentro de carpetas y subcarpetas

Notapor boligan » 2017-08-05 18:41 @820

Hola a todos.

Bueno, mi duda es la siguiente: tengo un árbol de directorios organizados por año/mes/días. Ejemplo: dentro del año 2017 tengo 12 carpetas correspondientes a 12 meses, dentro de cada mes 30 o 31 carpetas según los días del mes y dentro de cada día una cantidad X de ficheros.

Lo que necesito es obtener las rutas completas de cada fichero, pues cada fichero pasará después por un decodificador. Ya tengo esto:

$directorio="W:/2017/Agosto/*"; #ruta
@files = glob($directorio);
foreach $files(@files){
push @lista,$files;
if(-f $files){push @fichero,$files;}
elsif(-d $files){push @carpetas,$files;}
}
print "@fichero";
print "@carpetas";

Y obtengo solo lo que está dentro dentro de agosto (30 carpetas, 0 ficheros). Yo necesito, como dije, lo que está en las subcarpetas que están dentro de agosto, o sea las 30 carpetas de los días de agosto y dentro de cada día leer los archivos...

P.D.: ojalá me entiendan, jejeje.
boligan
Perlero nuevo
Perlero nuevo
 
Mensajes: 7
Registrado: 2017-06-14 11:28 @519

Publicidad

Re: Buscar dentro de carpetas y subcarpetas

Notapor explorer » 2017-08-05 22:28 @977

Lo que falta es repetir la búsqueda dentro de cada una de las carpetas de los días.
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. $directorio = "W:/2017/Agosto";
  2.  
  3. @archivos_del_mes = glob("$directorio/*");
  4.  
  5. foreach $archivo_del_mes (@archivos_del_mes) {
  6.         if (-f $archivo_del_mes) {      # archivos sueltos colgando del directorio del mes (?)
  7.                 push @archivos, $files;
  8.         }
  9.         elsif (-d $archivo_del_mes) {   # es un directorio que contiene días
  10.                 my @dias = glob("$directorio/$archivo_del_mes/*");      # sacamos un listado de todos los días
  11.                 for my $dia (@dias) {                                                   # por cada día
  12.                         my @archivos_del_dia = glob("$directorio/$archivo_del_mes/$dia/*");     # archivos de ese día
  13.                         push @archivos, grep { -f $_ } @archivos_del_dia;                       # los vamos guardando todos juntos
  14.                 }
  15.         }
  16. }
  17. print "@archivos";
Coloreado en 0.008 segundos, usando GeSHi 1.0.8.4
JF^D Perl Programming
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14035
Registrado: 2005-07-24 18:12 @800
Ubicación: Madrid, España


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado