Ruby - 从目录中获取第二个最新文件?

时间:2015-02-20 19:37:29

标签: ruby getfiles

我有这段脚本来获取目录中的最新文件

dir=Dir.glob("./logs/*").max_by {|f| File.mtime(f)}

我还想从目录中获取第二个最新文件。我能写些什么才能实现这个目标?

2 个答案:

答案 0 :(得分:5)

您可以使用 Ruby 2.2.0 执行以下操作,该方法为方法Enumerable#max_byEnumerable#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]等。