发布
社区首页 >问答首页 >Ruby Dir['**/*']限制?

Ruby Dir['**/*']限制?
EN

Stack Overflow用户
提问于 2010-12-06 12:41:34
回答 3查看 1.1K关注 0票数 3

可以对Dir.each方法设置限制吗?我只想检索最后10个文件(按创建日期排序)。

示例:

代码语言:javascript
代码运行次数:0
复制
Dir[File.join(Rails.root, '*.json'), 10].each do |f|
  puts f
end 

谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-12-06 15:03:04

在这种情况下,让底层操作系统来做繁重的工作可能会更有效率,尤其是当您正在梳理大量文件时:

代码语言:javascript
代码运行次数:0
复制
%x[ls -rU *.json | tail -10].split("\n")

在将打开外壳的Mac上,按创建日期的逆序对所有“*.json”文件进行排序,返回最后十位。名称将以字符串形式返回,因此split会在行尾将它们分解为数组。

lstail命令真的很快,用编译好的C代码完成它们的工作,避免了我们在Ruby语言中不得不做的过滤循环。

这样做的缺点是它依赖于操作系统。Windows可以获取创建数据,但命令不同。Linux不存储文件创建日期。

票数 4
EN

Stack Overflow用户

发布于 2010-12-06 13:33:56

ctime之前的最后10个文件...

代码语言:javascript
代码运行次数:0
复制
Dir['*'].map { |e| [File.ctime(e), e] }.sort.map { |a| a[1] }[-10..-1]

第二个#map{}只是去掉了ctime对象,所以如果您不介意直接使用[ctime, fname]数组,那么可以不使用它。

票数 2
EN

Stack Overflow用户

发布于 2010-12-06 13:10:13

试用each_with_index http://ruby-doc.org/core/classes/Enumerable.html#M003141

代码语言:javascript
代码运行次数:0
复制
Dir[...].each_with_index do |f, i|
  break if i == 10
  puts f
end

并创建使用.atime http://ruby-doc.org/core/classes/File.html#M002547的脚本

创建基于日期的常规命名系统。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4363286

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档