如何在ruby中按上次修改时间订购文件?

时间:2011-01-19 19:51:33

标签: ruby file directory-listing

如何在ruby中获取上次修改时间顺序的文件?我能够轻松地敲击键盘来实现这一目标:

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 }

但我想知道是否有更复杂的方法来做到这一点?

3 个答案:

答案 0 :(得分:57)

简单地说:

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

答案 1 :(得分:10)

这是一个真正的问题,基于* nix的文件系统不会保留文件的创建时间,只能保留修改时间。

Windows确实会对其进行跟踪,但您只能尝试向底层文件系统寻求帮助。

此外,ctime并不意味着“创建时间”,而是“更改时间”,这是目录信息POINTING到文件的更改时间。

如果您想要文件的修改时间,那就是mtime,这是文件的更改时间。这是一个微妙但重要的区别。

答案 2 :(得分:4)

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