无论扩展情况如何(不区分大小写的扩展)Ruby,都可以使用特定扩展来获取目录中的所有文件

时间:2014-02-10 22:03:25

标签: ruby

在Ruby中,无论扩展情况如何,使用特定扩展名获取目录中所有文件的正确方法是什么?

例如,假设我有目录~/myDir,它包含文件file1.JPGfile2.jpgnoFile.pngfile3.jpg。我想只抓取jpg文件。我正在使用:

results = Dir[File.join(Dir.home, 'myDir', '*.jpg')].sort

但是这会让file1失效。

我不想要一个hacky解决方案,比如单独检查文件,同时在检查之前将每个文件强制为大写。我绝对不想要一些令人讨厌的东西,例如抓取包含扩展程序JPGJPgJpgjpgjpGjPG的文件。

如果与旧版本不向后兼容,请在答案中包含支持的版本。我在1.9.3但其他人可能不在。{/ p>

3 个答案:

答案 0 :(得分:4)

我们可以使用Dir.glob并将其作为第二个参数传递给File::FNM_CASEFOLD,以告诉它忽略该案例。这样就给了我们:

Dir.glob(File.join(Dir.home, 'myDir', "*.jpg"), File::FNM_CASEFOLD).sort

我在this post找到了这个解决方案,其中Derick Bailey谈到this post

我不确定它是否适用于所有版本,但如果有人知道让我知道,我会在这里更新。 Trans在这篇文章的最后一个链接中,似乎并不总是支持说“文档说'(所以+ File :: FNM_CASEFOLD +被忽略)'”。

答案 1 :(得分:1)

如果您只想抓取带有“jpg”扩展名的文件(例如JPG,Jpg,jpg,...),您可以使用:

files = Dir.glob("*.[Jj][Pp][Gg]")

答案 2 :(得分:0)

我认为DutGRIFF的答案是要走的路,但作为一个额外的选择,你也可以使用这种方法:

Dir.glob(File.join(Dir.home, 'myDir', "*")).grep(/\.jpg\z/i).sort