Wie Dateien, die von Zeit der letzten Änderung in Ruby bestellen?
-
12-10-2019 - |
Frage
Wie Dateien in letzter Änderung, um in Ruby zu bekommen? Ich konnte meine Tastatur genug zerschlagen, dies zu erreichen:
file_info = Hash[*Dir.glob("*").collect {|file| [file, File.ctime(file)]}.flatten]
sorted_file_info = file_info.sort_by { |k,v| v}
sorted_files = sorted_file_info.collect { |file, created_at| file }
Aber ich frage mich, ob es mehr anspruchsvolle Art und Weise, dies zu tun?
Lösung
Wie wäre es einfach:
# If you want 'modified time', oldest first
files_sorted_by_time = Dir['*'].sort_by{ |f| File.mtime(f) }
# If you want 'directory change time' (creation time for Windows)
files_sorted_by_time = Dir['*'].sort_by{ |f| File.ctime(f) }
Andere Tipps
Ein echtes Problem dabei ist, dass * nichts-basierte Dateisysteme nicht halte Erstellungszeiten für Dateien, nur Änderungszeiten.
Windows dieses Programm verfolgen, aber Sie sind in dieses Betriebssystem mit jedem Versuch, beschränken das zugrunde liegende Dateisystem, um Hilfe zu bitten.
Auch ctime
bedeutet nicht „Erstellungszeit “es ist‚Wechselzeit‘, die die Änderungszeit des Verzeichnis Info Unter Hinweis auf die Datei.
Wenn Sie die Dateiänderungszeit wollen, ist es mtime
, das ist die Wechselzeit der Datei . Es ist ein subtiler, aber wichtiger Unterschied.
Dir.glob("*").sort {|a,b| File.ctime(a) <=> File.ctime(b) }