Search code examples
rubyfiledirectory-listing

How to order files by last modified time in ruby?


How to get files in last modified time order in ruby? I was able to smash my keyboard enough to achieve this:

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 }

But I wonder if there is more sophisticated way to do this?


Solution

  • How about simply:

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