可以对Dir.each方法设置限制吗?我只想检索最后10个文件(按创建日期排序)。
示例:
Dir[File.join(Rails.root, '*.json'), 10].each do |f|
puts f
end
谢谢。
发布于 2010-12-06 15:03:04
在这种情况下,让底层操作系统来做繁重的工作可能会更有效率,尤其是当您正在梳理大量文件时:
%x[ls -rU *.json | tail -10].split("\n")
在将打开外壳的Mac上,按创建日期的逆序对所有“*.json”文件进行排序,返回最后十位。名称将以字符串形式返回,因此split
会在行尾将它们分解为数组。
ls
和tail
命令真的很快,用编译好的C代码完成它们的工作,避免了我们在Ruby语言中不得不做的过滤循环。
这样做的缺点是它依赖于操作系统。Windows可以获取创建数据,但命令不同。Linux不存储文件创建日期。
发布于 2010-12-06 13:33:56
ctime之前的最后10个文件...
Dir['*'].map { |e| [File.ctime(e), e] }.sort.map { |a| a[1] }[-10..-1]
第二个#map{}
只是去掉了ctime对象,所以如果您不介意直接使用[ctime, fname]
数组,那么可以不使用它。
发布于 2010-12-06 13:10:13
试用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的脚本
创建基于日期的常规命名系统。
https://stackoverflow.com/questions/4363286
复制相似问题