在Ruby中,无论扩展情况如何,使用特定扩展名获取目录中所有文件的正确方法是什么?
例如,假设我有目录~/myDir
,它包含文件file1.JPG
,file2.jpg
,noFile.png
和file3.jpg
。我想只抓取jpg文件。我正在使用:
results = Dir[File.join(Dir.home, 'myDir', '*.jpg')].sort
但是这会让file1
失效。
我不想要一个hacky解决方案,比如单独检查文件,同时在检查之前将每个文件强制为大写。我绝对不想要一些令人讨厌的东西,例如抓取包含扩展程序JPG
,JPg
,Jpg
,jpg
,jpG
和jPG
的文件。
如果与旧版本不向后兼容,请在答案中包含支持的版本。我在1.9.3
但其他人可能不在。{/ p>
答案 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