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

如何使用Ruby在目录中找到最近修改的文件夹?,ruby,file,find,directory,Ruby,File,Find,Directory,如何使用Ruby在目录中找到最近修改的文件夹(不是文件) Dir.glob("a_directory/*/").max_by {|f| File.mtime(f)} Dir.glob(“a_directory/*/”返回a_directory中的所有目录名(作为字符串)和max_by返回目录名,其中File.mtime返回最大(即最近)日期 编辑:更新答案以匹配更新的问题在当前目录中查找最近修改的目录: folders = Dir["*"].delete_if{|entry| entry.in

如何使用Ruby在目录中找到最近修改的文件夹(不是文件)

Dir.glob("a_directory/*/").max_by {|f| File.mtime(f)}
Dir.glob(“a_directory/*/”
返回
a_directory
中的所有目录名(作为字符串)和
max_by
返回目录名,其中
File.mtime
返回最大(即最近)日期


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

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

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("**/*") 

我实际上在寻找如何找到最近修改过的文件夹而不是文件,因此file.new会抛出错误,并且没有Dir。mtime@Sam:
File.new
不会出现在我的代码中的任何地方,而
File.mtime
可以使用目录名作为参数。不要试图“修复”我的代码,它可以按原样工作。这几乎可以正常工作,但Dir.glob()返回目录和文件,而我只需要目录。我发现Dir.glob(“*”).delete(如果{entry | entry.include?”).max_by{f | File.mtime(f)}适用于此,但它假设您的目录中没有句点…@Dasmowenator:
Dir.glob(“*”
包括文件和目录,
Dir.glob(*/”
)只包括目录(注意后面的
/
)。