Používanie Glob s adresármi v Ruby

"globbingu"súbory (s Dir.glob) v Ruby vám umožňuje vybrať iba požadované súbory, napríklad všetky súbory XML, v danom adresári. Aj keď Dir.blog je Páči sa mi to regulárne výrazy nie sú. V porovnaní s rubín'regulárne výrazy a je užšie spojené s zástupnými znakmi rozšírenia shellu.

Opak globpingu, ktorý sa opakuje vo všetkých súboroch v adresári, je možné vykonať pomocou Dir.foreach metóda.

príklad

Nasledujúci glob sa bude zhodovať so všetkými súbormi končiacimi na .rb v aktuálny adresár. Používa jednu zástupnú hviezdičku. Hviezdička bude zodpovedať nule alebo viac znakov, takže akýkoľvek súbor končiaci na .rb sa bude zhodovať s touto zemeguľou vrátane súboru s názvom jednoducho .rb, bez prípony súboru a predošlého obdobia. Metóda glob vráti všetky súbory, ktoré zodpovedajú pravidlám globbing, ako pole, ktoré možno uložiť na neskoršie použitie alebo opakovať.

 #! / usr / bin / env ruby


 Dir.glob („*. Rb“). Každý do | f |

 kladie f

 koniec

Zástupné znaky a ďalšie

Naučiť sa môžete iba niekoľko zástupných znakov:

instagram viewer
  • * - Zhoda nulových alebo viacerých znakov. Glob obsahujúci iba hviezdičku a žiadne ďalšie znaky alebo zástupné znaky sa bude zhodovať so všetkými súbormi v aktuálnom adresári. Hviezdička sa zvyčajne skombinuje s príponou súboru, ak nie viac znakov, aby sa vyhľadávanie zúžilo.
  • ** - Porovnajte všetky adresáre rekurzívne. Používa sa na zostup do stromu adresárov a na nájdenie všetkých súborov v podadresároch aktuálneho adresára, nielen súborov v aktuálnom adresári. Táto zástupná značka je preskúmaná v príklade nižšie.
  • ? - Zápas ľubovoľný znak. Toto je užitočné pri hľadaní súborov, ktorých meno je v konkrétnom formáte. Napríklad 5 znakov a prípona .xml možno vyjadriť ako ... xml.
  • [A-Z] - Zhodujte ľubovoľný znak zo sady znakov. Sada môže byť buď zoznam znakov alebo rozsah oddelený spojovníkom. Znakové sady sa riadia rovnakou syntaxou a správajú sa rovnako ako znakové sady v regulárnych výrazoch.
  • {a, b} - Zhoda vzoru a alebo b. Aj keď to vyzerá ako kvantifikátor regulárneho výrazu, nie je. Napríklad v regulárnom výraze vzor a {1,2} bude zodpovedať 1 alebo 2 znakom „a“. Pri guľkách bude zodpovedať reťazci a1 alebo a2. Vo vnútri tohto konštruktu môžu byť vnorené ďalšie vzory.

Jedna vec na zváženie je citlivosť na veľké a malé písmená. Záleží na operačnom systéme, aby určil, či test.txt a TEST. TXT odkazovať na rovnaký súbor. V systéme Linux a ďalších systémoch ide o rôzne súbory. V systéme Windows sa bude odkazovať na rovnaký súbor.

Operačný systém je tiež zodpovedný za poradie, v ktorom sa výsledky zobrazujú. Môže sa líšiť, ak ste v systéme Windows verzus linux, napríklad.

Jedna posledná vec, ktorú treba poznamenať, je Smer [globstring] metóda pohodlia. Toto je funkčne rovnaké ako Dir.glob (globstring) a je tiež sémanticky správna (indexujete adresár, podobne ako pole). Z tohto dôvodu môžete vidieť Dir [] častejšie ako Dir.glob, ale to isté.

Príklady použitia zástupných znakov

Nasledujúci príklad programu bude demonštrovať toľko vzorov, koľko dokáže, v mnohých rôznych kombináciách.

 #! / usr / bin / env ruby


 # Získať všetky súbory .xml

 Dir [ '*. Xml']


 # Získajte všetky súbory s 5 znakmi a príponou .jpg

 Dir [ '... jpg']


 # Získajte všetky obrázky vo formáte jpg, png a gif

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


 # Zísť do adresárového stromu a získať všetky obrázky jpg

 # Poznámka: Týmto sa tiež uložia obrázky jpg do aktuálneho adresára

 Dir [ '** / *. Jpg']


 # Zíďte do všetkých adresárov počnúc Uni a nájdite všetky

 # jpg obrázky.

 # Poznámka: zostupuje iba o jeden adresár

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


 # Zísť do všetkých adresárov počnúc Uni a všetkými

 # podadresáre adresárov začínajúce na Uni a find

 # všetky obrázky .jpg

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