9

ファイル構造:

folderA/
 - folder1/
   - file1.rb
   - file2.rb
 - folder2/
   - folder1/
     - file1.rb
   - folder2/
     - file1.rb
 - file1.rb
 - file2.rb

folderA/file1.rb以下のコードでは、と でのみ反復できますfolderA/file2.rb

# EDITTED
Dir.glob('folderA/*.rb') do |file|
  puts file
end

(Dir.foreach(dir)..if..なし.rbで)のみを使用して、すべてのファイル(サブフォルダーを含む)を反復処理することは可能ですか?glob

PS Ruby v.1.8.6

4

3 に答える 3

24
Dir.glob('folderA/**/*.rb') do |file|
  puts file
end

公式ドキュメントから:

**
ディレクトリを再帰的に照合します。

于 2012-08-03T15:51:39.337 に答える
2

これを試して:

Dir.glob('spec/**/*.rb') do |rspec_file|
  puts rspec_file
end

グロブについてはこちらをお読みください

于 2012-08-03T15:45:08.397 に答える
2

これはうまくいくはずです:

ソースはこちら: http://ruby-doc.org/stdlib-1.9.3/libdoc/find/rdoc/Find.html

require 'find'

Find.find('spec/') do |rspec_file|
    next if FileTest.directory?(rspec_file)
    if /.*\.rb/.match(File.basename(rspec_file))
        puts rspec_file
    end
end

Ruby 1.8.7でテスト済み

于 2012-08-03T15:58:18.133 に答える