Использование Glob с каталогами в Ruby

"подстановка"файлы (с Dir.glob) в Ruby позволяет выбрать только те файлы, которые вы хотите, например, все файлы XML, в данном каталоге. Даже если Dir.blog является нравиться регулярные выражения, это не так. Это очень ограничено по сравнению с Рубинрегулярные выражения и более тесно связаны с подстановочными знаками расширения оболочки.

Противоположность глобализации, итерации по всем файлам в каталоге, можно сделать с помощью Dir.foreach метод.

пример

Следующий глобус будет соответствовать всем файлам, оканчивающимся на .rb в Текущий каталог. Он использует один подстановочный знак, звездочку. Звездочка будет соответствовать нулю или более символов, поэтому любой файл, заканчивающийся на .rb будет соответствовать этому глобу, в том числе файл с именем просто .rb, с ничем до расширения файла и предшествующего периода. Метод glob возвращает все файлы, которые соответствуют правилам globbing, в виде массива, который можно сохранить для дальнейшего использования или повторить.

 #! / usr / bin / env ruby


 Dir.glob ('*. Rb'). Каждый делает | f |

 ставит f

 конец

instagram viewer

Подстановочные знаки и многое другое

Есть только несколько подстановочных знаков для изучения:

  • * - Совпадение ноль или более символов. Глобус, состоящий только из звездочки и никаких других символов или подстановочных знаков, будет соответствовать всем файлам в текущем каталоге. Звездочка обычно объединяется с расширением файла, если не больше символов, чтобы сузить поиск.
  • ** - Сопоставить все каталоги рекурсивно. Это используется для спуска в дерево каталогов и поиска всех файлов в подкаталогах текущего каталога, а не только файлов в текущем каталоге. Этот шаблон рассматривается в приведенном ниже примере кода.
  • ? - Соответствуйте любому персонажу. Это полезно для поиска файлов, имена которых имеют определенный формат. Например, 5 символов и расширение XML могут быть выражены как ... XML.
  • [A-Z] - Соответствуйте любому символу в наборе символов. Набор может быть либо списком символов, либо диапазоном, разделенным символом дефиса. Наборы символов следуют тому же синтаксису и ведут себя так же, как наборы символов в регулярных выражениях.
  • {а, б} - Совпадение по шаблону a или b. Хотя это выглядит как квантификатор регулярного выражения, это не так. Например, в регулярном выражении шаблон а {1,2} будет соответствовать 1 или 2 символам «а». В глобализации это будет соответствовать строке a1 или a2. Другие шаблоны могут быть вложены в эту конструкцию.

Одна вещь, чтобы рассмотреть это чувствительность к регистру. Это зависит от операционной системы, чтобы определить, является ли test.txt и Тестовое задание. Текст обратитесь к тому же файлу. В Linux и других системах это разные файлы. В Windows они ссылаются на один и тот же файл.

Операционная система также отвечает за порядок отображения результатов. Это может отличаться, если вы используете Windows по сравнению с Linux, например.

И последнее, что следует отметить, это Dir [globstring] удобный метод. Это функционально так же, как Dir.glob (Globstring) и также семантически правильно (вы индексируете каталог, очень похоже на массив). По этой причине вы можете увидеть Dir [] чаще чем Dir.glob, но это одно и то же.

Примеры использования подстановочных знаков

В следующем примере программа продемонстрирует как можно больше паттернов во многих различных комбинациях.

 #! / usr / bin / env ruby


 # Получить все .xml файлы

 Dir [ '*. XML']


 # Получить все файлы с 5 символами и расширением .jpg

 Dir [ '... JPG']


 # Получить все изображения JPG, PNG и GIF

 Дир ['*. {Jpg, png, gif}']


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

 # Примечание: при этом также будут сохраняться изображения jpg в текущем каталоге

 Dir [ '** / *. JPG']


 # Спуститесь во все каталоги, начиная с Uni, и найдите все

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

 # Примечание: это спускается только на один каталог

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


 # Спуск во все каталоги, начиная с Uni и все

 # подкаталоги каталогов, начинающихся с Uni и find

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

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

instagram story viewer