Як говорили інші, Dir::foreachтут хороший варіант. Тим НЕ менше, зверніть увагу , що Dir::foreachі Dir::entriesзавжди буде включати в себе .і ..(поточні і батьківські каталоги). Ви, як правило, не захочете працювати над ними, тому можете використовувати Dir::each_childабо Dir::children(як це запропонував ma11hew28 ) або робити щось подібне:
Dir.foreach('/path/to/dir') do |filename|
next if filename == '.' or filename == '..'
# Do work on the remaining files & directories
end
Dir::foreachі Dir::entries(а також Dir::each_childі Dir::children) також включають в себе приховані файли & каталоги. Часто це саме те, що ти хочеш, але якщо це не так, потрібно щось зробити, щоб пропустити їх.
Крім того, ви можете розглянути, Dir::globщо забезпечує просту відповідність підстановки:
Dir.glob('/path/to/dir/*.rb') do |rb_filename|
# Do work on files & directories ending in .rb
end
Dir.foreachпрацює над ітерацією вмісту каталогу, тому щось ще багато чого відбувається.