Масштабирование каталога не повторяется полностью

#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