Ruby - 从目录中获取倒数第二个文件?

Ruby - Get the second most recent file from a directory?

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

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

我还想从目录中获取第二个最近的文件。我可以写什么来实现这个目标?

您可以使用 Ruby 2.2.0 执行以下操作,它向方法添加了一个 可选 参数 Enumerable#max_byEnumerable#min_byEnumerable#min

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

max_by(n) {|obj| block } → obj

If the n argument is given, minimum n elements are returned as an array.

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 将 return 文件数组按 mtime 从旧到新排序,因此您可以使用 dir[-1](最后一个数组元素)访问最新文件,第二个最新的 dir[-2] 等。或者您可以恢复数组并相应地使用 dir[0]dir[1] 等。