Ruby Dir['**/*'] 限制?
是否可以对 Dir.each 方法设置限制?我只想检索最后 10 个文件(按创建日期排序)。
示例:
Dir[File.join(Rails.root, '*.json'), 10].each do |f|
puts f
end
谢谢。
Is it possible to set a limit on Dir.each method? I would like to retrieve only last 10 files (ordered by create date).
Example:
Dir[File.join(Rails.root, '*.json'), 10].each do |f|
puts f
end
Thx.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
这是要求底层操作系统完成繁重工作可能会更有效的时候之一,特别是当您梳理大量文件时:
在将打开 shell 的 Mac 操作系统上,对所有“*.json”进行排序' 按文件的创建日期倒序排列,返回最后十个。名称将以字符串形式返回,因此 split 会在行尾将它们分解为数组。
ls
和tail
命令非常快,并且在编译的 C 代码中完成它们的工作,避免了我们必须在 Ruby 中执行的循环来过滤掉内容。这样做的缺点是它依赖于操作系统。 Windows 可以获取创建数据,但命令不同。 Linux 不存储文件创建日期。
This is one of those times when it might be more efficient to ask the underlying OS to do the heavy lifting, especially if you're combing through a lot of files:
On Mac OS that will open a shell, sort all '*.json' files by their creation date in reverse order, returning the last ten. The names will be returned in a string so
split
will break them into an Array at the line-ends.The
ls
andtail
commands are really fast and doing their work in compiled C code, avoiding the loops we'd have to do in Ruby to filter things out.The downside to this is it's OS dependent. Windows can get at creation data but the commands are different. Linux doesn't store file creation date.
ctime 的最后 10 个文件...
第二个
#map{}
只是删除了 ctime 对象,因此如果您不介意直接使用[ctime, fname]< 数组/code> 你可以把它去掉。
The last 10 files by ctime...
The second
#map{}
just strips off the ctime objects so if you don't mind working directly with the array of[ctime, fname]
you can leave it off.尝试each_with_index
http://ruby-doc.org/core/classes/Enumerable.html#M003141
并创建一个脚本来使用 .atime
http://ruby-doc.org/core/classes/File.html#M002547
创建一个基于日期的常规命名系统。
Try each_with_index
http://ruby-doc.org/core/classes/Enumerable.html#M003141
And create a script to use the .atime
http://ruby-doc.org/core/classes/File.html#M002547
to create a conventional naming system based on date.