【问题标题】:Recursively cycle through a directory with many sub directories to find the latest modified file in each sub directory [duplicate]递归循环通过具有许多子目录的目录以在每个子目录中查找最新修改的文​​件[重复]
【发布时间】:2016-09-26 05:17:39
【问题描述】:

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

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

但是我需要用 ruby​​ 编写这个,我有一个名为“活动”的网络文件夹的场景,有很多子目录,每个子目录都有子目录,子目录有子目录等等。我需要返回 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)

【问题讨论】:

  • 主要任务是如何下降。一旦您决定如何执行此操作,就很容易跟踪最新文件的使用期限。小心递归下降,因为在大目录上可能需要一段时间;由于权衡,在您确定一种方法之前,应该探索链接页面上的所有各种方法。请阅读“How to Ask”。我们需要看到您为解决问题所做的努力。问我们如何做某事还为时过早;您应该先研究和尝试,然后向我们展示您的尝试。
  • 我编辑了我原来的问题

标签: ruby


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2011-07-30
    • 1970-01-01
    • 2011-06-01
    • 2016-03-11
    • 1970-01-01
    • 2016-03-24
    • 1970-01-01
    • 2012-03-10
    • 2021-06-15
    相关资源
    最近更新 更多