2009-08-15 536 views
21

有誰知道Ruby中是否有現有的模塊/函數來遍歷文件系統目錄和文件?我正在尋找類似於Python的os.walk。我找到的最近的模塊是Find,但需要做一些額外的工作來完成遍歷。什麼是Python的os.walk的等價物?

的Python代碼如下所示:

for root, dirs, files in os.walk('.'): 
    for name in files: 
     print name 
    for name in dirs: 
     print name 

回答

22

下面將遞歸打印的所有文件。那麼你可以使用File.directory?看看它是一個目錄還是一個文件。

Dir['**/*'].each { |f| print f } 
+9

而不是'迪爾[富]。每{條}',您可以用'Dir.glob(富){}吧'這將迭代所有匹配塊的文件,而不是首先創建一個臨時數組。 – sepp2k 2009-08-15 11:34:52

+0

是'Dir.foreach('。'){| f |打印f}'一樣嗎?它看起來比[]版更具表現力。 – 2009-08-15 13:49:19

+1

@Thierry:否.Dir.foreach不會輸入子目錄。 – sepp2k 2009-08-15 14:01:56

8

Find看起來很簡單對我說:

require "find" 
Find.find('mydir'){|f| puts f} 
+0

「查找」定義在哪裏? 'require「find」' 以下是文檔:http://www.ruby-doc.org/stdlib-1.9.3/libdoc/find/rdoc/Find.html – Sukima 2013-05-01 16:49:34

3
require 'pathname' 

def os_walk(dir) 
    root = Pathname(dir) 
    files, dirs = [], [] 
    Pathname(root).find do |path| 
    unless path == root 
     dirs << path if path.directory? 
     files << path if path.file? 
    end 
    end 
    [root, files, dirs] 
end 

root, files, dirs = os_walk('.') 
相關問題