0

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

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 函数。但它没有!它卡在第一个文件夹上,我收到错误消息!有什么帮助吗?

4

2 回答 2

4

您的代码始终查看“当前”(.) 目录。您的 get_information 方法传入一个绑定到 的值dir,您从不使用该值。

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

使用 . 您尝试做的事情会更容易Dir.glob,但是如果您对自己的解决方案很执着,则需要更改Dir.foreach(".")Dir.foreach(dir).

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

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

这仅包括目录。如果您想要非常接近现有代码的确切输出,我会执行以下操作:

puts Dir.glob('*/**').map { |f| File.directory?(f)? f : "Not a Directory" } 
于 2012-08-23T17:08:57.843 回答
2

退房Dir.glob。文档在这里

于 2012-08-23T17:00:59.157 回答