Använda Glob med kataloger

"Globbing" -filer (med Dir.glob) i Ruby kan du välja bara de filer du vill, till exempel alla XML-filer, i en viss katalog. Även om Dir.blog är tycka om regelbundna uttryck, det är det inte. Det är väldigt begränsat jämfört med Rubys regelbundna uttryck och är närmare besläktat med skalutvidgningskort.

Det motsatta av att glödja, iterera över alla filer i en katalog, kan göras med Dir.foreach metod.

Exempel

Följande glob matchar alla filer som slutar på .rb i den aktuella katalogen. Den använder ett enda jokertecken, asterisken. Stjärnan matchar noll eller fler tecken, så alla filer som slutar på .rb kommer att matcha detta glob, inklusive en fil som heter helt enkelt .rb, med ingenting före filändelsen och dess föregående period. Globmetoden returnerar alla filer som matchar globlingsreglerna som en matris, som kan sparas för senare användning eller itereras över.

 #! / usr / bin / env ruby

 

 Dir.glob ('*. Rb'). Var och en gör | f |

 sätter f

 slutet

Wildcards och mer

Det finns bara några få jokertecken att lära sig:

  • * - Matcha noll eller fler tecken. En glob bestående av endast asterisken och inga andra tecken eller jokertecken matchar alla filer i den aktuella katalogen. Stjärnan kombineras vanligtvis med en filändelse om inte fler tecken för att begränsa sökningen.
  • ** - Matcha alla kataloger rekursivt. Detta används för att gå ner i katalogträdet och hitta alla filer i underkataloger i den aktuella katalogen, snarare än bara filer i den aktuella katalogen. Detta jokertecken utforskas i exempelkoden nedan.
  • ? - Matcha vilken karaktär som helst. Detta är användbart för att hitta filer vars namn är i ett visst format. Till exempel kan 5 tecken och en .xml-förlängning uttryckas som ?????.xml.
  • [A-z] - Matcha alla tecken i teckensatsen. Uppsättningen kan vara antingen en lista med tecken eller ett intervall separerat med bindestrecket. Teckenuppsättningar följer samma syntax som och uppträder på samma sätt som teckenuppsättningar i vanliga uttryck.
  • A, b - Matcha mönstret a eller b. Även om detta ser ut som ett vanligt uttryckskvantifierare, är det inte det. Till exempel, i regelbundet uttryck, mönstret a 1,2 matchar 1 eller 2 'a' tecken. När man glödar kommer den att matcha strängen a1 eller a2. Andra mönster kan häckas inuti denna konstruktion.

En sak att tänka på är fallkänslighet. Det är upp till operativsystemet att avgöra om test.txt och test.txt hänvisar till samma fil. På Linux och andra system är det olika filer. I Windows hänvisar dessa till samma fil.

Operativsystemet ansvarar också för i vilken ordning resultaten visas. Det kan skilja sig om du till exempel använder Windows eller Linux.

En sista sak att notera är Dir [globstring] bekvämlighetsmetod. Detta är funktionellt samma som Dir.glob (globstring) och är också semantiskt korrekt (du indexerar en katalog, ungefär som en matris). Av denna anledning kanske du ser Dir [] oftare än Dir.glob, men de är samma sak.

Exempel på att använda jokertecken

Följande exempelprogram visar så många mönster som det kan i många olika kombinationer.

 #! / usr / bin / env ruby

 

 # Hämta alla .xml-filer

 Dir [ '*. Xml']

 

 # Få alla filer med 5 tecken och en .jpg-förlängning

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

 

 # Få alla jpg-, png- och gif-bilder

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

 

 # Gå ner i katalogträdet och få alla jpg-bilder

 # Obs: detta kommer också att arkivera jpg-bilder i den aktuella katalogen

 Dir [ '** / *. Jpg']

 

 # Gå ner i alla kataloger som börjar med Uni och hitta alla

 # jpg-bilder.

 # Obs! Detta kommer bara ner en katalog

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

 

 # Gå ner i alla kataloger som börjar med Uni och alla

 # underkataloger av kataloger som börjar med Uni och hitta

 # alla .jpg-bilder

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