【问题标题】:How can I get the path for the last created file in a directory using Ruby?如何使用 Ruby 获取目录中最后创建的文件的路径?
【发布时间】:2011-03-11 02:50:29
【问题描述】:

如何使用 Ruby 获取目录中最后创建的文件的路径?

【问题讨论】:

标签: windows ruby file


【解决方案1】:

我将此方法添加到 railsapp/config/initializers 内的 supermanpatches.rb 文件中,以打开我最新生成的迁移(在 TextMate 中),而无需复制和粘贴文件名或类似内容:

def latestmigration
  `mate db/migrate/#{Dir.glob(File.join(Rails.root, 'db', 'migrate', '*.rb')).max { |a,b| File.ctime(a) <=> File.ctime(b)} }`
end

‡:(仅供 ruby​​/rails 初学者参考,初始化代码无处不在,并且不需要从 rails 内的任何地方都可以访问类到文件名的范围)

注意:对于 windows(或 mac),您可以使用 vim 命令而不是 mate 命令,并且 sublimetext 也可以配置为执行此操作,我认为它称为 subl 命令。 mate & subl 虽然我认为默认情况下不起作用,所以你必须先设置它

【讨论】:

    【解决方案2】:

    Dir.glob(root_path + ".").map{ |file| [file,File.ctime(file)]}.max.first

    【讨论】:

      【解决方案3】:
      Dir.entries("testdir").reject{|f| f== '.' || f=='..'}.sort_by{|f| File.ctime(f)}.last
      

      【讨论】:

        【解决方案4】:

        我认为这是相当简短的:

        Dir.glob(File.join(path, '*.*')).max { |a,b| File.ctime(a) <=> File.ctime(b) }
        

        【讨论】:

        • 您可能希望将文件模式更改为“*”,除非您的所有文件始终都有扩展名。另请注意,以 .不予考虑
        • 简写版:Dir[File.join(path, '*.*')].max_by(&amp;File.method(:ctime))
        【解决方案5】:

        您可以使用dir类列出所有文件并检查文件对象的ctime或atime(ctime是上次更改文件的时间,atime是上次访问文件的时间)

        Dir.foreach("testdir") {|f| puts File.ctime(x) }
        

        【讨论】:

        • 如何订购 foreach?我只想要最近 ctime 的文件路径。
        • 使用 sort_by{ |f| f.ctime(f)}
        猜你喜欢
        • 2011-12-26
        • 1970-01-01
        • 1970-01-01
        • 2014-08-13
        • 1970-01-01
        • 2019-01-02
        • 1970-01-01
        • 2011-03-14
        • 1970-01-01
        相关资源
        最近更新 更多