Подтвердить что ты не робот

Ruby: Используя регулярное выражение для поиска и открытия файла на основе его имени?

Я пытаюсь проверить содержимое файла, созданного из кода. Проблема в том, что полное имя файла основано на отметке времени abc123_#{d.strftime('%Y%m%d%I%M%S')}.log

Как я мог использовать File, чтобы найти этот файл и прочитать его? Я попытался сделать File.exists?() с регулярным выражением в качестве параметра, но это не сработало.

Я нашел это в другом вопросе о stackoverflow:

File.basename(file_path).match(/_.*(css|scss|sass)/)

Как я могу использовать это в моем случае, когда файл находится в моей папке public?

ANSWER

Итак, оба ответа ниже работают, и я использовал их комбинацию.

Dir['public/*.log'].select { |f| f =~ /purge_cc_website/}

* действует как подстановочный знак, который является своего рода регулярным выражением сам по себе. После этого вы фильтруете массив с использованием реального регулярного выражения.

4b9b3361

Ответ 1

Dir[] принимает файл glob, поэтому, если ваш шаблон не слишком сложный, вы можете просто сделать:

Dir['public/abc123_*.log']

Подробнее glob info здесь.

Ответ 2

File предназначен для чтения одного файла. Вам нужно использовать Dir для поиска файлов по имени.

files = Dir['*'].select {|x| x =~ /_.*(css|scss|sass)/ }

Если вам нужен только последний файл в случае дубликатов:

files = Dir['*'].select {|x| x =~ /_.*(css|scss|sass)/ }.sort.last