Ant / Groovy:如何删除超过给定日期的文件,但最多保留3个[重复]
Posted
技术标签:
【中文标题】Ant / Groovy:如何删除超过给定日期的文件,但最多保留3个[重复]【英文标题】:Ant/Groovy: How to delete files over than given date, but keep a maximum of 3 [duplicate] 【发布时间】:2016-08-12 12:28:39 【问题描述】:使用如下所示的代码在日志目录中随时间老化文件。 MAX_LOG_FILE_AGE
可以计算或设置为任何所需的值。这会正确删除比预期旧的文件。
问题源于我收到的要求发生变化,改为仅保留一定数量的最新文件,在我的情况下为三 (3) 个。如何实现?
long deleteDate = System.currentTimeMillis() - MAX_LOG_FILE_AGE
def ant = new AntBuilder()
ant.delete()
fileset (dir: "$someParentDir/logs/", includes: '**/*')
date(millis: "$deleteDate", when: 'before')
【问题讨论】:
另一个答案可以很容易地改用基于 groovy 的选择器。 使用 'ant' 不会成为答案的一部分(现在),所以如果重新打开该答案可以显示。 【参考方案1】:这对于 Ant 来说很难做到。但是在直接的 Groovy 中,它是易于处理的:
def MAX_LOG_FILE_AGE_IN_MILLIS = 24 * 60 * 60 * 1000
def deleteDate = System.currentTimeMillis() - MAX_LOG_FILE_AGE_IN_MILLIS
def logDir = "logs"
def logs = []
// build list of files
new File(logDir).eachFileRecurse file ->
if (file.isFile() && (file.lastModified() < deleteDate))
logs << file
// sort by last modified (ascending)
def sortedLogs = logs.toSorted a,b -> a.lastModified() <=> b.lastModified()
// N most recent are skipped
def n = 3
def victims = sortedLogs.dropRight(n)
// delete victims
victims.each victim ->
println "deleting $victim.name"
victim.delete()
【讨论】:
谢谢您-根据您的建议,我制作了一个仅限 groovy 的实现。我想证明这一点,但需要重新打开问题才能这样做。以上是关于Ant / Groovy:如何删除超过给定日期的文件,但最多保留3个[重复]的主要内容,如果未能解决你的问题,请参考以下文章