2011-10-10 50 views
2
files = Dir[File.join(path, '**', '*.jpg')].each do |s| 
    puts s  
end 

我在一个目录中有一堆子文件夹,这段代码似乎进入了一些子目录,但跳过了其中的大部分。我怎样才能让它遍历所有目录?Dir globbing没有完全递归

此外,我应该使用Find而不是?如果是这样,有人可以提供一个与上述相同的示例,即在所有子目录中查找.jpgs?

编辑 -

好了,显然,当我与.JPG做(大写)它找到的所有文件。奇怪...我怎么能告诉找到他们中的任何一个?

+0

请您谈一下“递归进入所有目录”,但你选择jpg-文件。您期望的子目录中是否有真正的JPG?你错过了jpgs吗? – knut

+0

您正在使用Linux?在Windows中,使用大写的文件名没有问题 - 你可以自己决定,如果它是一个bug或一个功能;) – knut

回答

4

这可能与不同的扩展帮助:

files = Dir[File.join(path, '**', '*.{jpg,JPG}')].each do |s| 
    puts s  
end 
+1

这正是我最终做的。谢谢!我在Mac上,对于那些好奇的人。 – LuxuryMode

-4

显然,你对迪尔忘记使用水珠方法,如:

Dir.glob(File.join('**','*.jpg')) 
+5

从文档:'Dir [array]':等同于调用Dir.glob – knut