递归循环遍历具有许多子目录的目录,以在每个子目录中查找最新的已修改文件

时间:2016-05-27 19:08:49

标签: ruby

我发现这篇关于使用bash的帖子

How to recursively find the latest modified file in a directory?(使用bash)

但是我需要在ruby中写这个,我有一个带有名为" active"的网络文件夹的场景,有许多子目录,每个子目录都有子目录,子节点有子目录等等上。我需要将lvl1目录中包含的最新修改文件的日期返回到其许多子目录中的某个位置。

---------------------------
active | lvl1 | lvl2 | lvl3
       |      |      | lvl3
       |      | lvl2 |
       |      | lvl2 |
       |      | lvl2 | 
       | lvl1 |      |
---------------------------

使用我目前的内容进行编辑,这对于返回文件名非常有用,但是我坚持在每个文件出现时存储File.mtime()的位置,我需要确定哪个lvl1文件夹需要存档:

def walk(start)
  Dir.foreach(start) do |x|
    path = File.join(start, x)
    if x == "." or x == ".."
      next
    elsif File.directory?(path)
      walk(path)
    else
      puts x
    end
  end
end


path = 'folder\\path'

walk(path)

1 个答案:

答案 0 :(得分:3)

您可以使用Dir#glob方法查找给定目录及其子目录中所有文件的列表,然后选择上次修改时间值最高的文件,该文件可以使用File#mtime获取方法

Dir.glob("active/lvl1/**/*").max_by {|i| File.mtime(i)}