perl | Búsqueda de archivos y directorios

Para atravesar un árbol de directorios en Perl , hay varias formas/métodos. El recorrido se puede realizar a través de llamadas de función opendir y readdir que son parte del lenguaje de programación Perl. Atravesar archivos y directorios en Perl también se puede hacer a través File::Finddel módulo que viene con el lenguaje Perl.

File::Find contiene 2 módulos:

  • Buscar: find() la función realiza una búsqueda en profundidad en los @directorios mencionados/definidos. Llama e invoca la "&wanted"función para cada archivo o subdirectorio que se encuentra en ese directorio. find()funciona de arriba hacia abajo.
  • Profundidad de búsqueda: finddepth() realiza un recorrido posterior al pedido en lugar de realizar un pedido previo, trabajando de abajo hacia arriba. El funcionamiento de la finddepth()función es casi similar a la find()función, excepto por el hecho de que invoca &wantedel contenido del directorio primero que lo invoca para el directorio.

La única diferencia entre ambos módulos es el orden en que se analizan los archivos y directorios. FindBuscar módulos en Perl tiene todas las funciones similares al comando Unix .
FindLa función toma dos argumentos:

  • El primer argumento es una subrutina llamada para cada archivo que encontramos a través de findla función.
  • El segundo argumento es la lista de directorios donde la findfunción buscará los archivos.

Los siguientes son algunos scripts de ejemplo de Perl para encontrar los archivos y directorios:

Ejemplo 1: para imprimir todos los directorios disponibles en la carpeta buscada.

#!usr/bin/perl
print "content-type: text/html\n\n";
  
use strict;
use warnings;
use File::Find;
  
find(
{
    wanted => \&findfiles,
},
'GeeksforGeeks'
);
  
sub findfiles
{
   
    #To search only the directory
    print "$File::Find::dir\n";  
}
exit;

Salida:

 
Ejemplo 2: Para imprimir los archivos disponibles en un directorio

#!usr/bin/perl
print "content-type: text/html\n\n";
   
use strict;
use warnings;
use File::Find;
   
find(
{
    wanted => \&findfiles,
},
'GeeksforGeeks'
);
   
sub findfiles
{
    
    #To search the files inside the directories
    print "$File::Find::name\n";  
}
exit;

Salida:

 
Ejemplo 3: Imprimiendo solo una vez todos los directorios disponibles/presentes en la carpeta/directorio al que estamos accediendo.

#!usr/bin/perl
print "content-type: text/html\n\n";
   
use strict;
use warnings;
use File::Find;
   
find(
{
    wanted => \&findfiles,
},
'GeeksforGeeks'
);
   
sub findfiles
{
    
    # To search all the available directories 
    # in the given directory without accessing them
    print "$File::Find::name\n" if -d;  
  
}
exit;

Salida:

 
Ejemplo 4: Para acceder a los archivos presentes dentro de un directorio sin acceder a los otros directorios disponibles en ese mismo directorio.

#!usr/bin/perl
print "content-type: text/html\n\n";
   
use strict;
use warnings;
use File::Find;
   
find(
{
    wanted => \&findfiles,
},
'GeeksforGeeks'
);
   
sub findfiles
{
    # Not accessing Geeks_New and Image directory
    # present inside the dir GeeksforGeeks
    $File::Find::prune = 1 if /Geeks_New/;
    $File::Find::prune = 1 if /Images/;
      
    # To print the files present in dir GeekforGeeks
    print "$File::Find::name\n";
  
}
exit;

Salida:

 
Ejemplo 5: Uso de finddepth()la función para encontrar los archivos y subdirectorios en un directorio.

#!usr/bin/perl
print "content-type: text/html\n\n";
   
use strict;
use warnings;
use File::Find;
   
finddepth(
{
    wanted => \&findfiles,
},
'GeeksforGeeks'
);
   
sub findfiles
{
    print "$File::Find::name\n";
}
exit;


 
Example 6: To find all types of text files.

#!usr/bin/perl
print "content-type: text/html\n\n";
   
use strict;
use warnings;
use File::Find;
   
find(
{
    wanted => \&findfiles,
},
'GeeksforGeeks'
);
   
sub findfiles
{   
    print "$File::Find::name\n" if -T;
}
exit;

Producción:

Publicación traducida automáticamente

Artículo escrito por akshatyadav y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *