Как упорядочить файлы по времени последнего изменения в рубине? - PullRequest
29 голосов
/ 19 января 2011

Как получить файлы в порядке последнего изменения времени в рубине?Я смог разбить клавиатуру достаточно, чтобы добиться этого:

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 ]

58 голосов
/ 19 января 2011

Как насчет просто:

# 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) }
10 голосов
/ 19 января 2011

Настоящая проблема заключается в том, что файловые системы * nix не сохраняют время создания файлов, а только время модификации.

Windows отслеживает это, но вы ограничены этой ОС при любой попытке обратиться за помощью к базовой файловой системе.

Также, ctime не означает «время создания», это «время изменения», которое является временем изменения информации каталога, указывающей на файл.

Если вам нужно время изменения файла, это mtime, то есть время изменения файла . Это тонкое, но важное отличие.

4 голосов
/ 19 января 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...