Ruby:迭代思考文件夹中的所有.rb(包括子文件夹)文件

时间:2012-08-03 15:43:24

标签: ruby

文件结构:

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

使用下面的代码,我只能在folderA/file1.rbfolderA/file2.rb

上进行迭代
# EDITTED
Dir.glob('folderA/*.rb') do |file|
  puts file
end

是否可以仅使用.rb迭代所有glob文件(包括子文件夹)(不使用Dir.foreach(dir).. if ..)?

P.S。 Ruby v.1.8.6

3 个答案:

答案 0 :(得分:22)

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

来自官方docs

  

**
  以递归方式匹配目录。

答案 1 :(得分:2)

试试这个:

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

阅读关于glob的here

答案 2 :(得分: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中测试