是否可以对Dir.each方法设置限制?我想只检索最后10个文件(按创建日期排序)。
示例:
Dir[File.join(Rails.root, '*.json'), 10].each do |f|
puts f
end
THX。
答案 0 :(得分:4)
这是其中一个时候,要求底层操作系统执行繁重工作可能会更有效,特别是如果你正在梳理很多文件:
%x[ls -rU *.json | tail -10].split("\n")
在将打开shell的Mac OS上,按其创建日期按相反顺序对所有'* .json'文件进行排序,返回最后十个。名称将以字符串形式返回,因此split
会将它们分成行末端的数组。
ls
和tail
命令非常快,并且在编译的C代码中完成它们的工作,避免了我们在Ruby中必须做的循环来过滤掉事情。
这方面的缺点是它取决于操作系统。 Windows可以获取创建数据但命令不同。 Linux不存储文件创建日期。
答案 1 :(得分:2)
Dir['*'].map { |e| [File.ctime(e), e] }.sort.map { |a| a[1] }[-10..-1]
第二个#map{}
只是剥离ctime对象,所以如果你不介意直接使用[ctime, fname]
数组,你可以将其关闭。
答案 2 :(得分:0)
尝试each_with_index http://ruby-doc.org/core/classes/Enumerable.html#M003141
Dir[...].each_with_index do |f, i|
break if i == 10
puts f
end
创建一个脚本以使用.atime http://ruby-doc.org/core/classes/File.html#M002547
根据日期创建传统的命名系统。