我正在使用以下命令在文件名中包含“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?' - 这似乎不正确,因为我应该在选择之前进行排序。
任何帮助将不胜感激
答案 0 :(得分:0)
#max_by
最多会返回一个元素。您应该能够使用#sort_by
根据mtime
,#reverse
此列表排列文件,然后使用#find
(或其别名#detect
)拔出匹配谓词的第一个元素(在这种情况下为{ |f| f[/abc/] }
)。