Comment trouver le dossier modifié le plus récemment (NOT A FILE) dans un répertoire utilisant Ruby?Comment trouver le dossier modifié le plus récemment dans un répertoire en utilisant Ruby?
4
A
Répondre
21
Dir.glob("a_directory/*/").max_by {|f| File.mtime(f)}
Dir.glob("a_directory/*/")
retourne tous les noms de répertoires dans a_directory
(sous forme de chaînes) et max_by
renvoie le nom du répertoire pour lequel File.mtime
retourne la plus grande date (à savoir la plus récente).
Edit: mise à jour de réponse pour correspondre à la question mise à jour
1
Trouvez le répertoire le plus récemment modifié dans le répertoire courant:
folders = Dir["*"].delete_if{|entry| entry.include? "."}
newest = folders[0]
folders.each{|folder| newest = folder if File.mtime(folder) > File.mtime(newest)}
1
expansion au large de la réponse de sepp2k un peu pour ajouter une vérification récursive tous les sous-répertoires pour les à venir à travers ceci:
#!/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
et utilisez plutôt si vous voulez que tous les fichiers et répertoires non seulement:
Dir.glob("**/*")
Je suis à la recherche pour savoir comment trouver le dernier dossier modifié plutôt que le fichier, donc File.new jette et erreur, et il n'y a pas Dir.mtime – Dasmowenator
@ Sam: 'File.new' ne apparaît n'importe où dans mon code et 'File.mtime' fonctionne très bien avec un nom de répertoire en tant qu'argument. N'essayez pas de "réparer" mon code, cela fonctionne tel quel. – sepp2k
Ceci est très proche du travail, mais Dir.glob() retourne les répertoires ET les fichiers, et je ne veux que des répertoires. J'ai trouvé que Dir.glob ("*"). Delete_if {| entrée | entrée.include? "."}. max_by {| f | File.mtime (f)} fonctionne pour cela, mais il suppose qu'aucun de vos répertoires ne contient de points ... – Dasmowenator