【发布时间】:2010-07-08 19:34:35
【问题描述】:
如何在使用 Ruby 的目录中找到最近修改的文件夹(NOT A FILE)?
【问题讨论】:
如何在使用 Ruby 的目录中找到最近修改的文件夹(NOT A FILE)?
【问题讨论】:
Dir.glob("a_directory/*/").max_by {|f| File.mtime(f)}
Dir.glob("a_directory/*/") 返回 a_directory 中的所有目录名称(作为字符串),max_by 返回 File.mtime 返回最大(即最近)日期的目录名称。
编辑:更新答案以匹配更新后的问题
【讨论】:
File.new 没有出现在我的代码中的任何位置,File.mtime 可以很好地使用目录名称作为参数。不要试图“修复”我的代码,它按原样工作。
Dir.glob("*") 包括文件和目录,Dir.glob("*/") 只包括目录(注意尾随的/)。
在当前目录中查找最近修改的目录:
folders = Dir["*"].delete_if{|entry| entry.include? "."}
newest = folders[0]
folders.each{|folder| newest = folder if File.mtime(folder) > File.mtime(newest)}
【讨论】:
稍微扩展 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("**/*")
【讨论】: