尝试使用通配符打开最新文件,然后使用include

时间:2014-08-25 10:55:13

标签: ruby sorting select

我正在使用以下命令在文件名中包含“abc”的目录中打开文件。通配符用作文件名的其余部分,包括时间戳(创建文件的时间和日期)。

      required = ["this", "two"]
      log = Dir['*.log'].select { |f| f.include?('abc')}
      result = required.all? do |phrase|
          log.any? { |line| line.include?(phrase) }
      end
      index = result ? "Pass" : "Fail"

上述脚本是自动化过程的一部分,因此不知道全名(在其中一个初始步骤中创建的文件)

有没有办法在.select之前按mtime对文件进行排序?

我在.select之前尝试过.sort和.max_by并获取私有方法错误

       log = Dir['*.log'].max_by {|f| File.mtime(f)}.select { |f| f.include?('abc')}

我已经在.select之后尝试过了,它获取了最新的文件但是抛出了未定义的方法'any?' - 这似乎不正确,因为我应该在选择之前进行排序。

任何帮助将不胜感激

1 个答案:

答案 0 :(得分:0)

#max_by最多会返回一个元素。您应该能够使用#sort_by根据mtime#reverse此列表排列文件,然后使用#find(或其别名#detect )拔出匹配谓词的第一个元素(在这种情况下为{ |f| f[/abc/] })。