Използване на Glob с директории в Ruby

"Globbing"файлове (с Dir.glob) в Ruby ви позволява да изберете само желаните файлове, като всички XML файлове, в дадена директория. Въпреки че Dir.blog е като редовни изрази, не е така. Много е ограничен в сравнение с рубинредовни изрази и е по-тясно свързан с символите за разширяване на черупките.

Обратното на глобулинг, итерация над всички файлове в директория, може да се направи с Dir.foreach метод.

пример

Следният глобус ще отговаря на всички файлове, завършващи в .rb в текуща директория. Използва един-единствен знак, звездичката. Звездичката ще отговаря на нула или повече знака, така че всеки файл, завършващ в .rb ще отговаря на този глобус, включително файл, наречен просто .rb, без нищо преди разширението на файла и предходния му период. Методът глобул ще върне всички файлове, които съответстват на правилата за глобализиране, като масив, който може да бъде записан за по-късна употреба или повторен.

 #! / usr / bin / env рубин


 Dir.glob ('*. Rb'). Всеки do | f |

 поставя f

 край

Wildcards и други

instagram viewer

Има само няколко заместващи знаци, които да научите:

  • * - Съвпадение на нула или повече знаци. Глобус, състоящ се само от звездичка и без други символи или символи, ще отговаря на всички файлове в текущата директория. Звездичката обикновено се комбинира с разширение на файла, ако не повече символи, за да стесните търсенето.
  • ** - Съпоставяйте всички директории рекурсивно. Това се използва за спускане в дървото на директории и намиране на всички файлове в под-директории на текущата директория, а не само файлове в текущата директория. Този знаков код се изследва в примера на кода по-долу.
  • ? - Съпоставете всеки един знак. Това е полезно за намиране на файлове, чието име е в определен формат. Например 5 знака и разширение .xml могат да бъдат изразени като ... XML.
  • [A-Z] - Съпоставете всеки знак в набор от знаци. Наборът може да бъде или списък от знаци, или диапазон, разделен с тирета. Наборите от символи следват същия синтаксис като и се държат по същия начин като символните набори в регулярни изрази.
  • {a, b} - Модел на съвпадение a или b. Въпреки че това изглежда като нормален количествен израз, не е. Например, при редовен израз, моделът а {1,2} ще съвпада с 1 или 2 'a' знака. При глобулиране тя ще съответства на низа a1 или a2. В тази конструкция могат да бъдат вложени други модели.

Едно нещо трябва да се има предвид чувствителност към случая. От операционната система зависи дали да test.txt и Тест. Текст вижте същия файл. В Linux и други системи това са различни файлове. В Windows те ще се отнасят до един и същ файл.

Операционната система е отговорна и за реда, в който се показват резултатите. Може да се различава, ако сте в Windows срещу Linux, например.

Едно последно нещо, което трябва да се отбележи, е Dir [globstring] удобен метод. Това функционално е същото като Dir.glob (globstring) и също е семантично правилен (индексирате директория, подобно на масив). По тази причина може да видите Dir [] по-често от Dir.glob, но те са едно и също нещо.

Примери с използване на Wildcards

Следващата примерна програма ще демонстрира възможно най-много модели в много различни комбинации.

 #! / usr / bin / env рубин


 # Вземете всички .xml файлове

 Dir [ '*. XML']


 # Вземете всички файлове с 5 знака и разширение .jpg

 Dir [ '... JPG']


 # Получете всички jpg, png и gif изображения

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


 # Спуснете се в дървото на директория и получете всички jpg изображения

 # Забележка: това ще изпрати jpg изображения в текущата директория

 Dir [ '** / *. JPG']


 # Спуснете се във всички директории, започващи с Uni и намерете всички

 # jpg изображения.

 # Забележка: това се спуска само по една директория

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


 # Спуснете се във всички директории, започващи с Uni и всички

 # поддиректории от директории, започващи с Uni и намиране

 # всички .jpg изображения

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

instagram story viewer