Ruby:遍历文件夹中的所有.rb文件(包括子文件夹)

9

文件结构:

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

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

附:Ruby v.1.8.6

3个回答

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

来自官方文档:

**
递归匹配目录。


2

试一下这个:

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

在这里阅读关于 glob 的内容(英文)


奇怪,这不是新的:http://www.ruby-doc.org/core-1.8.6/Dir.html#method-c-glob - davidrac

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中进行了测试


你可以随时将其删除。只是不要以<blah.rb的形式命名目录。 - jabadie

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接