我有这段脚本来获取目录中的最新文件
dir=Dir.glob("./logs/*").max_by {|f| File.mtime(f)}
我还想从目录中获取第二个最新文件。我能写些什么才能实现这个目标?
答案 0 :(得分:5)
您可以使用 Ruby 2.2.0 执行以下操作,该方法为方法Enumerable#max_by
,Enumerable#min_by
和{{添加了可选参数1}}等等。
Enumerable#min
max_by(n) {|obj| block } → obj
如果给出
Dir.glob("./logs/*").max_by(2) {|f| File.mtime(f)} # gives first 2 maximun. # If you want the second most recent Dir.glob("./logs/*").max_by(2) {|f| File.mtime(f)}.last
参数,则最少n个元素作为数组返回。
答案 1 :(得分:1)
dir = Dir.glob("./logs/*").sort_by { |f| File.mtime(f) }
puts dir[-2]
或
dir = Dir.glob("./logs/*").sort_by { |f| File.mtime(f) }.reverse
puts dir[1]
.sort_by
将返回按mtime
排序的文件数组,从最旧到最新,因此您可以使用dir[-1]
(最后一个数组元素)访问最新文件,第二个最新文件{ {1}}等。或者您可以恢复数组并相应地使用dir[-2]
,dir[0]
等。