我正在尝试递归一个目录及其所有子目录。我不想使用“查找”或除此之外的任何其他方式:
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功能。但它没有!它卡在第一个文件夹上,我收到一个错误!有什么帮助吗?
答案 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