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

Jon*_*oni 29 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 }
Run Code Online (Sandbox Code Playgroud)

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

Phr*_*ogz 58

怎么样简单:

# 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) }
Run Code Online (Sandbox Code Playgroud)

  • 为了好玩:`sorted = Dir['*'].sort_by(&File.method(:ctime))` (2认同)

the*_*Man 10

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

Windows会跟踪它,但您只能尝试向底层文件系统寻求帮助.

此外,ctime并不意味着"创建时间",它是"更改时间",这是目录信息POINTING到文件的更改时间.

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