如何获取目录中文件名最大的文件?

时间:2016-06-06 13:07:39

标签: ruby-on-rails ruby regex

考虑我有一个包含以下文件的目录:

20151203073208_create_animals.rb
20151214130905_create_spoons.rb
20151230083444_create_cups.rb
20160226120137_create_humans.rb
20160321204759_create_trees.rb

我需要获取这些数字 20160321204759

但是,找到最后修改的文件并不适用于此,因为任何带有该目录的文件都可以在最后修改。

例如:

Dir.glob(Rails.root.join('db/migrate/**.*')).max_by {|f| File.mtime(f)}

产生

20151214130905_create_spoons.rb

那么如何从最大数字的文件名中获取数字?

2 个答案:

答案 0 :(得分:3)

要查找所有迁移:

Dir['db/migrate/**/[0-9]*_*.rb']
#=> ["20151203073208_create_animals.rb",
#    "20151214130905_create_spoons.rb",
#    "20151230083444_create_cups.rb",
#    "20160226120137_create_humans.rb",
#    "20160321204759_create_trees.rb"]

时间戳最大的那个:

Dir['db/migrate/**/[0-9]*_*.rb'].max
#=> "20160321204759_create_trees.rb"

只是时间戳:

Dir['db/migrate/**/[0-9]*_*.rb'].max[/\d+/]
#=> "20160321204759"

当然,您也可以使用Dir.glob代替Dir.[]Rails.root而不是相对路径名。

答案 1 :(得分:1)

这样做的一个超级基本方式(不一定是最有效的)将是这样的:

Dir.glob(Rails.root.join('db/migrate/**.*')).max_by {|f| f.split('/').last.split('_').first}