2009-08-15 107 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('.')