2010-07-08 56 views

回答

21
Dir.glob("a_directory/*/").max_by {|f| File.mtime(f)} 

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

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

+0

实际上,我在寻找如何查找最近修改的文件夹,而不是文件,所以File.new抛出和错误,并没有Dir.mtime – Dasmowenator 2010-07-08 19:54:59

+0

@Sam:'File.new'不出现在我的代码中的任何地方,'File.mtime'工作得很好,目录名称作为参数。不要试图“修复”我的代码,它的工作原理。 – sepp2k 2010-07-08 19:59:37

+0

这真的很接近工作,但Dir.glob()返回目录和文件,我只想要目录。我发现 Dir.glob(“*”)。delete_if {| entry | entry.include? } {max_by “” |。F | File.mtime(f)} 适用于此,但它假设您的任何目录都不包含句号...... – Dasmowenator 2010-08-19 14:01:12

1

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

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

扩大关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("**/*") 
相关问题