Usando Glob con Directorios

Archivos "Globbing" (con Dir.glob) en Ruby le permite seleccionar solo los archivos que desea, como todos los archivos XML, en un directorio determinado. Aunque Dir.blog es me gusta expresiones regulares, no lo es. Es muy limitado en comparación con las expresiones regulares de Ruby y está más estrechamente relacionado con los comodines de expansión de shell.

Lo contrario de globbing, iterando sobre todos los archivos en un directorio, se puede hacer con el Dir.foreach método.

Ejemplo

El siguiente glob coincidirá con todos los archivos que terminan en .rb en el directorio actual Utiliza un solo comodín, el asterisco. El asterisco coincidirá con cero o más caracteres, por lo que cualquier archivo que termine en .rb coincidirá con este globo, incluido un archivo llamado simplemente .rb, sin nada antes de la extensión del archivo y su período anterior. El método glob devolverá todos los archivos que coincidan con las reglas globales como una matriz, que se puede guardar para su uso posterior o iterar sobre.

 #! / usr / bin / env ruby

 

 Dir.glob ('*. Rb'). Cada do | f |

 pone f

 final

Comodines y más

Solo hay algunos comodines para aprender:

  • * * - Empareja cero o más personajes. Un globo compuesto solo por el asterisco y ningún otro carácter o comodín coincidirá con todos los archivos en el directorio actual. El asterisco generalmente se combina con una extensión de archivo, si no más caracteres para limitar la búsqueda.
  • ** ** - Haga coincidir todos los directorios de forma recursiva. Esto se usa para descender al árbol de directorios y encontrar todos los archivos en subdirectorios del directorio actual, en lugar de solo archivos en el directorio actual. Este comodín se explora en el código de ejemplo a continuación..
  • ? - Empareja cualquier personaje. Esto es útil para buscar archivos cuyo nombre esté en un formato particular. Por ejemplo, 5 caracteres y una extensión .xml podrían expresarse como ?????.xml.
  • [Arizona] - Coincide con cualquier personaje en el conjunto de caracteres. El conjunto puede ser una lista de caracteres o un rango separado con el carácter de guión. Los juegos de caracteres siguen la misma sintaxis y se comportan de la misma manera que los juegos de caracteres en expresiones regulares.
  • a, b - Hacer coincidir el patrón ao b. Aunque esto parece un cuantificador de expresiones regulares, no lo es. Por ejemplo, en expresión regular, el patrón a 1,2 coincidirá con 1 o 2 caracteres 'a'. En globbing, coincidirá con la cadena a1 o a2. Se pueden anidar otros patrones dentro de esta construcción.

Una cosa a considerar es la sensibilidad a mayúsculas y minúsculas. Depende del sistema operativo determinar si TEST.txt y TeSt.TxT consulte el mismo archivo. En Linux y otros sistemas, estos son archivos diferentes. En Windows, estos se referirán al mismo archivo.

El sistema operativo también es responsable del orden en que se muestran los resultados. Puede diferir si está en Windows versus Linux, por ejemplo.

Una última cosa a tener en cuenta es el Dir [cadena global] método de conveniencia Esto es funcionalmente lo mismo que Dir.glob (cadena global) y también es semánticamente correcto (está indexando un directorio, como una matriz). Por esta razón, puede ver Dir [] más a menudo que Dir.glob, pero son lo mismo.

Ejemplos de uso de comodines

El siguiente programa de ejemplo demostrará tantos patrones como sea posible en muchas combinaciones diferentes.

 #! / usr / bin / env ruby

 

 # Obtenga todos los archivos .xml

 Dir ['*. Xml']

 

 # Obtenga todos los archivos con 5 caracteres y una extensión .jpg

 Dir ['?????. Jpg']

 

 # Obtenga todas las imágenes jpg, png y gif

 Dir ['*. Jpg, png, gif']

 

 # Desciende al árbol de directorios y obtén todas las imágenes jpg

 # Nota: esto también archivará imágenes jpg en el directorio actual

 Dir ['** / *. Jpg']

 

 # Desciende a todos los directorios comenzando con Uni y encuentra todos

 # imágenes jpg.

 # Nota: esto solo desciende por un directorio

 Dir ['Uni ** / *. Jpg']

 

 # Desciende a todos los directorios que comienzan con Uni y todos

 # subdirectorios de directorios que comienzan con Uni y find

 # todas las imágenes .jpg

 Dir ['Uni ** / ** / *. Jpg']