Utilisation de Glob avec des répertoires

Fichiers "Globbing" (avec Dir.glob) dans Ruby vous permet de sélectionner uniquement les fichiers que vous souhaitez, tels que tous les fichiers XML, dans un répertoire donné. Même si Dir.blog est comme les expressions régulières, ce n'est pas le cas. Il est très limité par rapport aux expressions régulières de Ruby et est plus étroitement lié aux caractères génériques d'extension de shell.

L’opposé du globbing, itérant sur tous les fichiers d’un répertoire, peut être fait avec le Dir.foreach méthode.

Exemple

Le glob suivant correspondra à tous les fichiers se terminant par .rb dans le répertoire courant. Il utilise un seul caractère générique, l'astérisque. L'astérisque correspondra à zéro ou plusieurs caractères, donc tout fichier se terminant par .rb correspondra à ce glob, y compris un fichier appelé simplement .rb, sans rien avant l'extension de fichier et sa période précédente. La méthode glob renverra tous les fichiers qui correspondent aux règles de globbing sous forme de tableau, qui peut être enregistré pour une utilisation ultérieure ou itéré sur.

 #! / usr / bin / env rubis

 

 Dir.glob ('*. Rb'). Chacun fait | f |

 met f

 fin

Caractères génériques et plus

Il n'y a que quelques caractères génériques à apprendre:

  • * - Faites correspondre zéro ou plusieurs caractères. Un glob composé uniquement de l'astérisque et d'aucun autre caractère ou caractère générique correspondra à tous les fichiers du répertoire actuel. L'astérisque est généralement combiné avec une extension de fichier s'il n'y a pas plus de caractères pour affiner la recherche.
  • ** - Correspond à tous les répertoires de manière récursive. Ceci est utilisé pour descendre dans l'arborescence des répertoires et trouver tous les fichiers dans les sous-répertoires du répertoire courant, plutôt que seulement les fichiers dans le répertoire courant. Ce caractère générique est exploré dans l'exemple de code ci-dessous.
  • ? - Faites correspondre n'importe quel caractère. Ceci est utile pour rechercher des fichiers dont le nom est dans un format particulier. Par exemple, 5 caractères et une extension .xml peuvent être exprimés comme ?????.xml.
  • [a-z] - Faites correspondre n'importe quel caractère du jeu de caractères. L'ensemble peut être soit une liste de caractères, soit une plage séparée par le trait d'union. Les jeux de caractères suivent la même syntaxe et se comportent de la même manière que les jeux de caractères dans les expressions régulières.
  • un B - Faites correspondre le motif a ou b. Bien que cela ressemble à un quantificateur d'expression régulière, ce n'est pas le cas. Par exemple, dans l'expression régulière, le motif un 1,2 correspondra à 1 ou 2 caractères 'a'. En globbing, il correspondra à la chaîne a1 ou a2. D'autres motifs peuvent être imbriqués à l'intérieur de cette construction.

Une chose à considérer est la sensibilité à la casse. C'est au système d'exploitation de déterminer si TEST.txt et TeSt.TxT se référer au même fichier. Sur Linux et d'autres systèmes, ce sont des fichiers différents. Sous Windows, ceux-ci feront référence au même fichier.

Le système d'exploitation est également responsable de l'ordre dans lequel les résultats sont affichés. Cela peut différer si vous utilisez Windows ou Linux, par exemple.

Une dernière chose à noter est la Dir [globstring] méthode de commodité. Ceci est fonctionnellement le même que Dir.glob (globstring) et est également sémantiquement correct (vous indexez un répertoire, un peu comme un tableau). Pour cette raison, vous pouvez voir Dir [] plus souvent que Dir.glob, mais c'est la même chose.

Exemples d'utilisation de caractères génériques

L'exemple de programme suivant montrera autant de modèles que possible dans de nombreuses combinaisons différentes..

 #! / usr / bin / env rubis

 

 # Obtenez tous les fichiers .xml

 Dir ['*. Xml']

 

 # Obtenez tous les fichiers avec 5 caractères et une extension .jpg

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

 

 # Obtenez toutes les images jpg, png et gif

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

 

 # Descendez dans l'arborescence des répertoires et obtenez toutes les images jpg

 # Remarque: cela enregistrera également les images jpg dans le répertoire courant

 Dir ['** / *. Jpg']

 

 # Descendez dans tous les répertoires commençant par Uni et trouvez tous

 # images jpg.

 # Remarque: cela ne descend que dans un répertoire

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

 

 # Descendez dans tous les répertoires commençant par Uni et tous

 # sous-répertoires de répertoires commençant par Uni et find

 # toutes les images .jpg

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