如何按创建日期组织文件?

时间:2013-09-22 04:40:00

标签: ruby unix file-organization

如何将目录排序到在任何给定时间和日期之前和之后创建的文件中?

我需要制作两个列表,一个是之前的文件,另一个是文件之后的某个日期/时间。

5 个答案:

答案 0 :(得分:3)

通过File API无法使用Ruby on OS X创建时间。一种方法是炮轰stat(1)。不漂亮,但至少回归创作(a.k.a出生)的时间:

def birth(file)
  Time.at(`stat -f%B "#{file}"`.chomp.to_i)
end

Dir.entries('.').sort_by {|f| birth f }

或者使用给出的分区答案。

以下是关于常见误解的详细帖子:ctime does not mean creation time

答案 1 :(得分:1)

您可以使用Enumerable#partition

files = Dir.entries('.')
time = Time.parse("2013-09-01")
before, after = files.partition { |file| File.ctime(file) < time }

正如Tin Man所说,ctime并不是唯一的文件时间方法。也许atimemtime是更好的选择。

答案 2 :(得分:0)

  

的ctime

     

返回stat的更改时间(即时间目录   有关文件的信息已更改,而不是文件本身。

     

请注意,在Windows(NTFS)上,返回创建时间(出生时间)。

     

http://www.ruby-doc.org/core-2.0.0/File/Stat.html#method-i-ctime

所以你可以这样做。

Dir.entries('.').sort {|a,b| File.stat(a).ctime <=> File.stat(b).ctime}

答案 3 :(得分:0)

这是我的答案。您可以使用File.new('filename').mtime

按照修改时间对目录中的文件进行排序
files_hash = Hash.new

Dir.foreach('.') do |file_name|
  modified_time = File.new(file_name).mtime
  unless file_name == '.' || file_name == '..' then
    files_hash[file_name] = modified_time
  end
end

# Sort the hash.
files_hash = files_hash.sort_by {|key, value| value}

files_hash.each do |name, time|
  puts "#{name} was modified at #{time}"
end

答案 4 :(得分:0)

Dir["dir_path/*"].sort_by { |p| File::Stat.new(p).birthtime }适用于macos