目录和FileTest.directory的奇怪行为

时间:2011-09-25 09:50:01

标签: ruby file scripting directory

我正在处理这个ruby脚本,我必须以递归方式查看从特定目录开始的所有子目录。但由于某种原因FileTest.directory?似乎只识别目录,如果它与脚本位于同一文件夹

def files(start)
  dir = Dir.open (start)
  dir.each do |x|
    p "#{x}: #{FileTest.directory?(x)}"
    if FileTest.directory?(x) && x != '.' && x != '..'
      start = x
      files (start)
    end
  end
end
files '.'

假设我的目录结构如下:在当前目录中,我有一个文件a.txt和两个名为'b'和drct2的目录。 'b'包含另一个目录'c','drct'包含另一个目录'dir3'。从当前目录运行时,上面的代码识别'b'和amp; 'drct2'作为目录但不是它们的子目录。谁能想到FileTest.directory的原因?是这样的吗?

1 个答案:

答案 0 :(得分:0)

您需要提供FileTest的完整路径,因为它相对于您当前的目录

所以,如果你有dira - > dirb - >您需要运行的文件:

FileTest.directory?('dira/dirb')

而不仅仅是

FileTest.directory?('dirb')

BTW我建议你研究一下Dir.glob('** / *')的方法 - 很有可能它可以做你需要做的开箱即用。