Как найти самую последнюю измененную папку в каталоге, используя Ruby? - PullRequest
4 голосов
/ 08 июля 2010

Как найти самую последнюю измененную папку (НЕ ФАЙЛ) в каталоге, используя Ruby?

Ответы [ 3 ]

23 голосов
/ 08 июля 2010
Dir.glob("a_directory/*/").max_by {|f| File.mtime(f)}

Dir.glob("a_directory/*/") возвращает все имена каталогов в a_directory (в виде строк), а max_by возвращает имя каталога, для которого File.mtime возвращает наибольшую (т.е. самую последнюю) дату.

Изменить: обновленный ответ, чтобы соответствовать обновленный вопрос

1 голос
/ 04 декабря 2012

Немного расширив ответ 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("**/*") 
1 голос
/ 08 июля 2010

Найти последний измененный каталог в текущем каталоге:

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