9

我正在使用 Dir.glob 访问与通配符模式匹配的所有文件集。

Dir.glob( '**/*.txt' ) { |file_name|
    parse file_name
}

因为这个 glob 调用是递归的并且因为涉及到很多文件,所以 glob 在块开始之前需要很长时间来构建文件数组。

我想要的是一种访问所有相同文件的方法,但在 Ruby“发现”每个文件后立即调用该块,以便立即处理第一个文件,而不是等待整个目录树完成搜索.

有这样的建筑吗?

4

2 回答 2

4

您还可以使用findIO.popen

IO.popen("find . -name '*.txt'").each { |path| parse(path.chomp) }
于 2018-11-18T15:38:47.293 回答
3

似乎没有内置的方法可以做到这一点。

希望这可以帮助你。通过递归扩展模式查找文件(Ruby 1.9.3):

class Dir
   def self.glob_recursively( pattern, &block )
     begin
       glob(pattern, &block)
       dirs = glob('*').select { |f| File.directory? f }
       dirs.each do |dir|
         # Do not process symlink
         next if File.symlink? dir
         chdir dir
         glob_recursively(pattern, &block)
         chdir '..'
       end
     rescue SystemCallError => e
       # STDERR
       warn "ERROR: #{pwd} - #{e}"
     end
   end
end

Dir.glob_recursively ('*.txt') {|file| puts file}
于 2013-05-10T18:32:31.690 回答