2013-05-10 67 views
8

我正在使用Dir.glob訪問匹配通配符模式的所有文件的集合。Ruby的Dir.glob有更快的選擇嗎?

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

因爲這水珠調用是遞歸的,因爲大量的文件都參與其中,水珠需要很長的時間塊開始之前建立的文件的數組。

我想要的是一種訪問所有相同文件的方式,但在Ruby「發現」每個文件後立即調用該塊,以便第一個文件立即處理,而不是等待整個目錄樹後完成搜索。

有沒有這樣的建築?

+1

也許用'Dir.foreach'和塊使用模式?查找模塊也可能有用。 – squiguy 2013-05-10 17:18:24

回答

4

似乎沒有內置的方式可以做到這一點。

希望這可以幫助你。查找擴張模式遞歸(紅寶石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}