我只是有一个关于编写函数的问题,该函数将在目录中搜索目录中的最新日志。我目前想出了一种方法,但是我想知道是否有更好(也许更合适)的方法。

我目前正在使用hdsentinel在计算机上创建日志,并将日志放置在目录中。日志保存如下:

/directory/hdsentinel-computername-date

ie. C:/hdsentinel-owner-2010-11-11.txt


因此,我编写了一个快速脚本,该脚本循环遍历某些变量以检查最近(过去一周内)的变量,但是在查看之后,我怀疑以这种方式进行操作的效率和适当性如何。

这是脚本:

String directoryPath = "D:"
def computerName = InetAddress.getLocalHost().hostName
def dateToday = new Date()
def dateToString = String.format('%tm-%<td-%<tY', dateToday)
def fileExtension = ".txt"
def theFile


for(int i = 0; i < 7; i++) {
    dateToString = String.format('%tY-%<tm-%<td', dateToday.minus(i))
    fileName = "$directoryPath\\hdsentinel-$computerName-$dateToString$fileExtension"

    theFile = new File(fileName)

    if(theFile.exists()) {
        println fileName
        break;
    } else {
        println "Couldn't find the file: " + fileName
    }
}

theFile.eachLine { print it }


该脚本运行良好,也许有一些缺陷。我觉得我应该继续问下去,问问这类事情的典型路线是什么。

感谢所有输入。

最佳答案

虽然有点混乱,但是您可以通过'groupBy'方法实现多列排序(在Aaron的代码上进行解释)。

def today = new Date()
def recent = {file -> today - new Date(file.lastModified()) < 7}

new File('/yourDirectory/').listFiles().toList()
.findAll(recent)
.groupBy{it.name.split('-')[1]}
.collect{owner, logs -> logs.sort{a,b -> a.lastModified() <=> b.lastModified()} }
.flatten()
.each{ println "${new Date(it.lastModified())}  ${it.name}" }


这将查找上周内创建的所有日志,并按所有者名称将其分组,然后根据修改日期进行排序。

如果目录中没有日志文件,则可能首先需要grep来查找包含“ hdsentinel”的文件。

我希望这有帮助。

编辑:
从您提供的示例中,我无法确定格式中的最低有效位:


C:/hdsentinel-owner-2010-11-11.txt


代表月或日。如果是后者,则按文件名排序将按所有者自动排序,然后按创建日期自动排序(无需上面代码的所有内容)。

例如:

new File('/directory').listFiles().toList().findAll(recent).sort{it.name}

关于file - Groovy读取目录中的最新文件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4160009/

10-11 14:21