考虑我有一个包含以下文件的目录:
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
那么如何从最大数字的文件名中获取数字?
答案 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}