How to order files by last modified time in ruby?

2020-02-08 10:10发布

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?

3条回答
手持菜刀,她持情操
2楼-- · 2020-02-08 10:39

A real problem with this is that *nix based file systems don't keep creation times for files, only modification times.

Windows does track it, but you're limited to that OS with any attempt to ask the underlying file system for help.

Also, ctime doesn't mean "creation time", it is "change time", which is the change time of the directory info POINTING to the file.

If you want the file's modification time, it's mtime, which is the change time of the file. It's a subtle but important difference.

查看更多
家丑人穷心不美
3楼-- · 2020-02-08 10:51

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

查看更多
劳资没心,怎么记你
4楼-- · 2020-02-08 11:03

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) }
查看更多
登录 后发表回答