ruby file directory-listing

¿Cómo ordenar archivos por última vez modificada en ruby?



file directory-listing (3)

¿Qué tal simplemente?

# 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) }

¿Cómo obtener los archivos en el último orden de tiempo modificado en ruby? Pude romper mi teclado lo suficiente para lograr esto:

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 }

Pero me pregunto si hay una forma más sofisticada de hacer esto.


Un problema real con esto es que los sistemas de archivos basados ​​en * nix no mantienen los tiempos de creación de los archivos, solo los tiempos de modificación.

Windows lo rastrea, pero está limitado a ese sistema operativo con cualquier intento de pedir ayuda al sistema de archivos subyacente.

Además, ctime no significa "hora de creación", es "hora de cambio", que es la hora de cambio de la información del directorio que ENTRA al archivo.

Si desea la hora de modificación del archivo, es mtime , que es la hora de cambio del archivo . Es una diferencia sutil pero importante.


Dir.glob("*").sort {|a,b| File.ctime(a) <=> File.ctime(b) }