【问题标题】:How can you find the most recently modified folder in a directory using Ruby?如何使用 Ruby 在目录中找到最近修改的文件夹?
【发布时间】:2010-07-08 19:34:35
【问题描述】:

如何在使用 Ruby 的目录中找到最近修改的文件夹(NOT A FILE)?

【问题讨论】:

    标签: ruby file find directory


    【解决方案1】:
    Dir.glob("a_directory/*/").max_by {|f| File.mtime(f)}
    

    Dir.glob("a_directory/*/") 返回 a_directory 中的所有目录名称(作为字符串),max_by 返回 File.mtime 返回最大(即最近)日期的目录名称。

    编辑:更新答案以匹配更新后的问题

    【讨论】:

    • 我其实是在寻找如何找到最近修改的文件夹而不是文件,所以 File.new 抛出错误,并且没有 Dir.mtime
    • @Sam: File.new 没有出现在我的代码中的任何位置,File.mtime 可以很好地使用目录名称作为参数。不要试图“修复”我的代码,它按原样工作。
    • 这真的很接近工作,但 Dir.glob() 返回目录和文件,我只想要目录。我发现 Dir.glob("*").delete_if{|entry| entry.include? "."}.max_by{|f| File.mtime(f)} 适用于此,但它假定您的目录中没有句点...
    • @Dasmowenator: Dir.glob("*") 包括文件和目录,Dir.glob("*/") 只包括目录(注意尾随的/)。
    【解决方案2】:

    在当前目录中查找最近修改的目录:

    folders = Dir["*"].delete_if{|entry| entry.include? "."}
    newest = folders[0]
    folders.each{|folder| newest = folder if File.mtime(folder) > File.mtime(newest)}
    

    【讨论】:

      【解决方案3】:

      稍微扩展 sepp2k 的答案以添加递归检查所有子目录的所有子目录:

      #!/usr/bin/env ruby
      if ARGV.count != 1 then raise RuntimeError, "Usage: newest.rb '/path/to/your dir'" end
      
      Dir.chdir(ARGV[0])
      newest_file = Dir.glob("**/").max_by {|f| File.mtime(f)}
      
      if newest_file != nil then
      puts newest_file.to_s + " " + File.mtime(newest_file).to_s
      else
      puts "No subdirectories"
      end
      

      如果您想要所有文件而不仅仅是目录,请使用它:

      Dir.glob("**/*") 
      

      【讨论】:

        最近更新 更多