Як говорили інші, 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
працює над ітерацією вмісту каталогу, тому щось ще багато чого відбувається.