Как уже говорили другие, Dir.foreach
- хороший вариант здесь. Однако обратите внимание, что Dir.entries
и Dir.foreach
всегда будут отображать .
и ..
(текущий и родительский каталоги). Как правило, вы не хотите работать над ними, поэтому вы можете сделать что-то вроде этого:
Dir.foreach('/path/to/dir') do |item|
next if item == '.' or item == '..'
# do work on real items
end
Dir.foreach
и Dir.entries
также показывают все элементы в каталоге - как скрытые, так и не скрытые. Часто это то, что вы хотите, но если это не так, вам нужно что-то сделать, чтобы пропустить скрытые файлы и каталоги.
В качестве альтернативы вы можете посмотреть Dir.glob
, который обеспечивает простое сопоставление с подстановочными знаками:
Dir.glob('/path/to/dir/*.rb') do |rb_file|
# do work on files ending in .rb in the desired directory
end