Folosirea Globului cu Directorii

Fișiere „Globbing” (cu Dir.glob) din Ruby vă permite să selectați doar fișierele pe care le doriți, cum ar fi toate fișierele XML, într-un director dat. Chiar dacă Dir.blog este ca expresii obișnuite, nu este. Este foarte limitată în comparație cu expresiile obișnuite ale lui Ruby și este mai strâns legată de wildcard-urile de expansiune.

Opusul globbing-ului, iterativ peste toate fișierele dintr-un director, se poate face cu Dir.foreach metodă.

Exemplu

Următorul glob se va potrivi cu toate fișierele care se termină .rb în directorul curent. Utilizează un singur wildcard, asteriscul. Asteriscul se va potrivi cu zero sau mai multe caractere, deci orice fișier se va încheia .rb se va potrivi cu acest glob, inclusiv un fișier numit simplu .rb, cu nimic înainte de extensia fișierului și perioada precedentă. Metoda glob va returna toate fișierele care se potrivesc regulilor globale ca un tablou, care poate fi salvat pentru utilizare ulterioară sau iteratat peste.

 #! / usr / bin / env ruby

 

 Dir.glob ('*. Rb'). Fiecare face | f |

 pune f

 Sfârșit

Wildcards și multe altele

Există doar câteva wildcards pentru a învăța:

  • * - Potriviți zero sau mai multe caractere. Un glob format doar din asterisc și niciun alt personaj sau wildcard nu se va potrivi cu toate fișierele din directorul curent. Asteriscul este de obicei combinat cu o extensie de fișier dacă nu mai multe caractere pentru a restrânge căutarea.
  • ** - Potriviți toate directoarele recursiv. Acest lucru este utilizat pentru a coborî în arborele de directoare și pentru a găsi toate fișierele din subdirectoarele directorului curent, mai degrabă decât doar fișierele din directorul curent. Acest wildcard este explorat în codul de exemplu de mai jos.
  • ? - Potriviți orice personaj. Acest lucru este util pentru găsirea fișierelor al căror nume este într-un anumit format. De exemplu, 5 caractere și o extensie .xml ar putea fi exprimate ca ?????.xml.
  • [A-z] - Potriviți orice personaj din setul de caractere. Setul poate fi fie o listă de caractere, fie un interval separat cu caracterul cratimei. Seturile de caractere urmează aceeași sintaxă ca și se comportă în același mod ca seturile de caractere în expresii regulate.
  • A, b - Potriviți modelul a sau b. Deși acesta pare un cuantificator de expresii obișnuit, nu este. De exemplu, în expresia obișnuită, modelul o 1,2 se vor potrivi cu 1 sau 2 caractere „a”. În globbing, se va potrivi cu șirul a1 sau a2. Alte modele pot fi cuibate în interiorul acestei construcții.

Un lucru de luat în considerare este sensibilitatea cazurilor. Depinde de sistemul de operare să stabilească dacă test.txt și test.txt consultați același fișier. Pe Linux și alte sisteme, acestea sunt fișiere diferite. Pe Windows, acestea se vor referi la același fișier.

Sistemul de operare este, de asemenea, responsabil pentru ordinea în care sunt afișate rezultatele. Poate diferi dacă sunteți pe Windows versus Linux, de exemplu.

Un ultim lucru de remarcat este Dir [globstring] metoda de comoditate. Acest lucru este funcțional la fel ca și Dir.glob (globstring) și este, de asemenea, corect semantic (indexați un director, la fel ca un tablou). Din acest motiv, este posibil să vedeți Dir [] mai des decât Dir.glob, dar sunt același lucru.

Exemple folosind wildcards

Următorul exemplu de program va demonstra cât mai multe tipare pe mai multe combinații diferite.

 #! / usr / bin / env ruby

 

 # Obține toate fișierele .xml

 Dir [ '*. Xml']

 

 # Obține toate fișierele cu 5 caractere și o extensie .jpg

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

 

 # Obține toate imaginile jpg, png și gif

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

 

 # Coborâți în arborele de directoare și obțineți toate imaginile jpg

 # Notă: aceasta va fi, de asemenea, fișiere jpg imagini în directorul curent

 Dir [ '** / *. Jpg']

 

 # Descinde în toate directoarele începând cu Uni și găsește toate

 # imagini jpg.

 # Notă: aceasta coboară doar un director

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

 

 # Descinde în toate directoarele începând cu Uni și toate

 # subdirectorii de directoare care încep cu Uni și find

 # toate imaginile .jpg

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