Używanie Globu z katalogami w Rubim

"Globbingpliki (z Dir.glob) w Ruby pozwala wybrać tylko wybrane pliki, takie jak wszystkie pliki XML, w danym katalogu. Nawet jeśli Blog reż jest lubić wyrażenia regularne, nie jest. Jest bardzo ograniczony w porównaniu do Rubinwyrażeń regularnych i jest ściślej powiązany z symbolami rozszerzającymi powłoki.

Przeciwieństwo globowania, iteracji po wszystkich plikach w katalogu, można zrobić za pomocą Reż. Przed metoda.

Przykład

Poniższy glob pasuje do wszystkich plików kończących się na .rb w bieżący katalog. Używa pojedynczego symbolu wieloznacznego, gwiazdki. Gwiazdka będzie pasować do zera lub więcej znaków, więc każdy plik kończący się na .rb dopasuje ten glob, w tym plik o nazwie po prostu .rb, bez niczego przed rozszerzeniem pliku i jego poprzednim okresem. Metoda glob zwróci wszystkie pliki, które pasują do reguł globowania, jako tablicę, którą można zapisać do późniejszego wykorzystania lub iteracji.

 #! / usr / bin / env ruby


 Dir.glob ('*. Rb'). Każdy do | f |

 stawia f

 koniec

Symbole wieloznaczne i więcej

instagram viewer

Do nauki jest tylko kilka symboli wieloznacznych:

  • * - Dopasuj zero lub więcej znaków. Glob składający się tylko z gwiazdki i żadnych innych znaków lub symboli wieloznacznych nie będzie pasował do wszystkich plików w bieżącym katalogu. Gwiazdka jest zwykle łączona z rozszerzeniem pliku, jeśli nie ma więcej znaków, aby zawęzić wyszukiwanie.
  • ** - Rekurencyjnie dopasuj wszystkie katalogi. Służy do zejścia do drzewa katalogów i znalezienia wszystkich plików w podkatalogach bieżącego katalogu, a nie tylko plików w bieżącym katalogu. Ten symbol wieloznaczny został zbadany w przykładowym kodzie poniżej.
  • ? - Dopasuj dowolną postać. Jest to przydatne do wyszukiwania plików, których nazwy mają określony format. Na przykład 5 znaków i rozszerzenie .xml można wyrazić jako ... xml.
  • [a-z] - Dopasuj dowolną postać z zestawu znaków. Zestaw może być listą znaków lub zakresem oddzielonym znakiem łącznika. Zestawy znaków mają tę samą składnię i zachowują się w taki sam sposób, jak zestawy znaków w wyrażeniach regularnych.
  • {a, b} - Dopasuj wzór a lub b. Chociaż wygląda to na kwantyfikator wyrażeń regularnych, tak nie jest. Na przykład w wyrażeniu regularnym wzorzec a {1,2} dopasuje 1 lub 2 znaki „a”. W globowaniu dopasuje ciąg a1 lub a2. Inne wzory mogą być zagnieżdżone w tym konstrukcie.

Jedną rzeczą do rozważenia jest rozróżnianie wielkości liter. To od systemu operacyjnego zależy, czy TEST.txt i Test. Tekst odnoszą się do tego samego pliku. W systemie Linux i innych systemach są to różne pliki. W systemie Windows będą się odnosić do tego samego pliku.

System operacyjny jest również odpowiedzialny za kolejność wyświetlania wyników. Może się różnić, jeśli używasz Windowsa Linux, na przykład.

Ostatnią rzeczą do odnotowania jest Dir [globstring] metoda wygody. Jest to funkcjonalnie takie samo jak Dir.glob (globstring) i jest również semantycznie poprawny (indeksujesz katalog, podobnie jak tablica). Z tego powodu możesz zobaczyć Reż [] częściej niż Dir.glob, ale są tym samym.

Przykłady użycia symboli wieloznacznych

Poniższy przykładowy program pokaże tyle wzorów, ile może w wielu różnych kombinacjach.

 #! / usr / bin / env ruby


 # Pobierz wszystkie pliki .xml

 Dir ['*. Xml']


 # Pobierz wszystkie pliki z 5 znakami i rozszerzeniem .jpg

 Dir ['... jpg']


 # Zbierz wszystkie obrazy jpg, png i gif

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


 # Zejdź do drzewa katalogów i zbierz wszystkie obrazy jpg

 # Uwaga: spowoduje to również zapisanie obrazów jpg w bieżącym katalogu

 Dir ['** / *. Jpg']


 # Zejdź do wszystkich katalogów zaczynających się od Uni i znajdź wszystko

 # zdjęć jpg.

 # Uwaga: zstępuje tylko w dół o jeden katalog

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


 # Zejdź do wszystkich katalogów zaczynając od Uni i wszystkich

 # podkatalogi katalogów zaczynających się od Uni i znajdź

 # wszystkie obrazy .jpg

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

instagram story viewer