嵌套目录搜索

时间:2015-05-01 15:23:41

标签: ruby directory nested

我试图创建一个程序,希望在C:\中搜索每个目录,子目录,子子目录等。我觉得我可以照顾那一部分,但也存在文件夹名称的问题。当我的程序搜索FOO或巨型Foo / ifelse语句时,可能会出现类似名为case的文件夹等案例问题搜索条件。

我的问题是:1。有没有办法忽视字母案例? 2.有没有办法为搜索提供更有效的陈述?

我目前的代码:

#foldersniffer by Touka, ©2015
base = Dir.entries("C:\\")
trees = Dir.entries("#{base}")
trees.each do |tree|
    if Dir.exist?("Foo")
        puts "Found Folder \"Foo\" in C:\\"
    elsif Dir.exist?("Bar")
        puts "Found Folder \"Bar\" in C:\\"
    else
        puts "No folders found"
    end
end
sleep

感谢任何帮助。

编辑:它正在尝试扫描像bootmgr这样的文件,并且它给了我错误...我不确定如何修复它。

2 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

考虑使用Dir.glob(...)和正则表达式进行不区分大小写的匹配:

Dir.glob('c:\\**\*') do |filename|
  if filename =~ /c:\\(foo|bar)($|\\)/i
    puts "Found #{filename}"
  end
end

Dir.glob参数的区分大小写可能与Windows系统无关:

  

请注意,此模式不是正则表达式,它更接近于shell glob。有关flags参数的含义,请参见File.fnmatch。请注意,区分大小写取决于您的系统(因此忽略File :: FNM_CASEFOLD),返回结果的顺序也是如此。