Ruby recurse目录

时间:2012-08-23 16:54:53

标签: ruby-on-rails ruby recursion

我正在尝试递归一个目录及其所有子目录。我不想使用“查找”或除此之外的任何其他方式:

task :locate do

    Dir.chdir(Dir.pwd+"/public/servers_info/config/deploy/")
    puts "Current Directory is: "+ Dir.pwd
    dir = Dir.pwd

    def get_information(dir)

        Dir.foreach(".") {|f|
            next if f == '.' or f == '..'

            if File.directory? f
                puts f
                #puts Dir.pwd+"/"+f
                get_information(Dir.pwd+"/"+f)
            else
                puts "Not Directory"
            end         
            }
    end

    get_information(dir)

end

我很确定它会起作用,我只是不知道为什么它会卡在第一个目录中!它进入基目录,检查文件是否是目录,然后再次运行SAME功能。但它没有!它卡在第一个文件夹上,我收到一个错误!有什么帮助吗?

2 个答案:

答案 0 :(得分:4)

您的代码始终在查看“当前”(。)目录。你的get_information方法传入一个绑定到dir的值,你永远不会使用它。

由于您从不使用该参数,因此永远不会更改目录。

Dir.glob,您尝试做的更容易,但如果您坚持使用解决方案,则需要将Dir.foreach(".")更改为Dir.foreach(dir)。< / p>

编辑添加:如果您只想打印出子目录列表,我会这样做

puts Dir.glob('*/**').select { |f| File.directory? f}

这仅包括目录。如果你想要非常接近现有代码的确切输出,我会做类似的事情:

puts Dir.glob('*/**').map { |f| File.directory?(f)? f : "Not a Directory" } 

答案 1 :(得分:2)

结帐Dir.glob。文档here