#ruby #glob
#ruby #глобус
Вопрос:
files = Dir[File.join(path, '**', '*.jpg')].each do |s|
puts s
end
У меня есть куча вложенных папок в каталоге, и этот фрагмент, похоже, входит в некоторые подкаталоги, но пропускает большинство из них. Как я могу сделать так, чтобы он повторялся во всех каталогах?
Кроме того, я должен использовать Find
вместо этого? Если да, может ли кто-нибудь привести пример, который делает то же самое, что и выше, а именно поиск файлов .jpg во всех подкаталогах?
Редактировать —
Хорошо, так что, очевидно, когда я делаю это с .JPG
помощью (с большой буквы), он находит все файлы. Странно… Как я могу сказать, чтобы найти любой из них?
Комментарии:
1. Вы говорите о «повторениях во все каталоги», но вы выбираете для jpg-файлов. Действительно ли в подкаталогах, которые вы ожидаете, есть jpg? Вам не хватает jpg?
2. Вы работаете с Linux? В Windows нет проблем с именами файлов с заглавной буквы — вы можете сами решить, ошибка это или особенность 😉
Ответ №1:
Это может помочь с различными расширениями:
files = Dir[File.join(path, '**', '*.{jpg,JPG}')].each do |s|
puts s
end
Комментарии:
1. это именно то, что я в итоге сделал. Спасибо! Я на Mac, для тех, кому было любопытно.
Ответ №2:
Очевидно, вы забыли использовать метод glob для Dir, например:
Dir.glob(File.join('**','*.jpg'))
Комментарии:
1. Из документации:
Dir[ array ]
: Эквивалентно вызову Dir.glob