• Publicidad

Contar ficheros en un par de directorios

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

Contar ficheros en un par de directorios

Notapor enric73 » 2016-06-14 15:51 @702

Buenas.

Necesito elegir un directorio entre dos. Quiero seleccionar el directorio que tenga más ficheros y guardar su dirección con el nombre de $grib-directory, por ejemplo, que $grib-direcotory=/home/Enric/gfs-0.5.2016061400

Y en el caso, que los dos tengan 65 ficheros, quedarme con el primer directorio.

El siguiente código me da el número de ficheros por directorio y que tienen en común el término gfs.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. $dir = "/home/Enric/GFS0.50/gfs-0.5.2016061400";
  2. opendir(DIR, "$dir");
  3. @FILES = grep { /gfs./ } readdir(DIR);
  4. print $#FILES, "\n";
  5. closedir(DIR);
  6.  
  7. $dir = "/home/Enric/GFS0.50BIS/gfs.2016061400";
  8. opendir(DIR, "$dir");
  9. @FILES = grep { /gfs./ } readdir(DIR);
  10. print $#FILES, "\n";
  11. closedir(DIR);
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Muchas gracias
enric73
Perlero nuevo
Perlero nuevo
 
Mensajes: 154
Registrado: 2012-03-16 06:27 @311

Publicidad

Re: Contar ficheros en un par de directorios

Notapor explorer » 2016-06-14 16:33 @731

Es... sencillo, ¿no?

Guardas el número de archivos en dos variables escalares, y con un if(), seleccionas el mayor.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Contar ficheros en un par de directorios

Notapor enric73 » 2016-06-15 11:30 @520

explorer, gracias

al final el código queda así, que te parece. Me sale por eso un aviso

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
Parentheses missing around "my" list at ./control.pl line 23.  ### corresponde a la línea opendir my $dh, $dir;
Parentheses missing around "my" list at ./control.pl line 30.  ### corresponde a la línea opendir my $dh2, $dir2;
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


pero el resultado es correcto

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. $dir = "/home/Enric/GFS0.50/gfs-0.5.2016061400";
  2. opendir my $dh, $dir;
  3. $num_gfs = grep {/gfs./} readdir($dh);
  4. print $num_gfs, "\n";
  5.  
  6. $dir2 = "/home/Enric/GFS0.50BIS/gfs.2016061400";
  7. opendir my $dh2, $dir2;
  8. $num_gfs2 = grep {/gfs./} readdir($dh2);
  9. print $num_gfs2, "\n";
  10.  
  11. if ( $num_gfs lt $num_gfs2 ) {
  12.     $grib_file = $dir2;
  13.     print $grib_file, "\n";
  14. }
  15. elsif ( $num_gfs2 lt $num_gfs ) {
  16.     $grib_file = $dir;
  17.     print $grib_file, "\n";
  18. }
  19. elsif ( $num_gfs2 eq $num_gfs ) {
  20.     $grib_file = $dir;
  21.     print $grib_file, "\n";
  22. }
  23.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
enric73
Perlero nuevo
Perlero nuevo
 
Mensajes: 154
Registrado: 2012-03-16 06:27 @311

Re: Contar ficheros en un par de directorios

Notapor explorer » 2016-06-18 16:51 @743

Es extraño, ese error. Quizás depende de la versión de Perl que estés usando.

Esta es mi versión:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/env perl
  2. use v5.14;
  3.  
  4. my $DIR  = "/home/Enric/GFS0.50/gfs-0.5.2016061400";
  5. my $DIR2 = "/home/Enric/GFS0.50BIS/gfs.2016061400";
  6.  
  7. opendir my($dh), $DIR;
  8. my $num_gfs  = grep {/gfs./} readdir($dh);
  9. # print $num_gfs, "\n";
  10. closedir $dh;
  11.  
  12. opendir my($dh2), $DIR2;
  13. my $num_gfs2 = grep {/gfs./} readdir($dh2);
  14. # print $num_gfs2, "\n";
  15. closedir $dh2;
  16.  
  17. my $grib_file  =  $num_gfs >= $num_gfs2  ?  $DIR : $DIR2;
  18.  
  19. say $grib_file;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: Bing [Bot] y 1 invitado

cron