有没有比Ruby的Dir.glob更快的替代品?

Old*_*ier 8 ruby performance glob

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

Dir.glob( '**/*.txt' ) { |file_name|
    parse file_name
}
Run Code Online (Sandbox Code Playgroud)

因为这个glob调用是递归的,并且由于涉及大量文件,所以在块启动之前,glob需要很长时间来构建文件数组.

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

有这样的建筑吗?

zho*_*uoa 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}
Run Code Online (Sandbox Code Playgroud)