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::Find
del 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 lafinddepth()
función es casi similar a lafind()
función, excepto por el hecho de que invoca&wanted
el 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. Find
Buscar módulos en Perl tiene todas las funciones similares al comando Unix . Find
La función toma dos argumentos:
- El primer argumento es una subrutina llamada para cada archivo que encontramos a través de
find
la función. - El segundo argumento es la lista de directorios donde la
find
funció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