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_by
、Enumerable#min_by
和 Enumerable#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]
等。
我有这段脚本可以获取目录中的最新文件
dir=Dir.glob("./logs/*").max_by {|f| File.mtime(f)}
我还想从目录中获取第二个最近的文件。我可以写什么来实现这个目标?
您可以使用 Ruby 2.2.0 执行以下操作,它向方法添加了一个 可选 参数 Enumerable#max_by
、Enumerable#min_by
和 Enumerable#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]
等。