Gradle:删除超过特定时间的文件

时间:2016-06-22 20:53:23

标签: gradle

我有一个gradle任务,删除与其名称中的某个模式匹配的文件:

task deleteTempFiles(type: Delete) {
    tasks['clean'].dependsOn(it)
    delete fileTree(dir: '..', include: '**/tempfile*.tmp')
}

我想删除早于2小时或24小时的文件。这件事可能是2天。在gradle中最简单的方法是什么?

2 个答案:

答案 0 :(得分:1)

task deleteTempFiles(type: Delete) {

    def cutoff = new Date().minus(1); //24 hrs ago

    delete fileTree (dir: '..')
        .matching{ include '**/tempfile*.tmp' }
        .findAll { 
            def filedate = new Date (it.lastModified())
            filedate.before(cutoff) 
        }
}

答案 1 :(得分:0)

如果您正在寻找一种将删除所有文件/文件夹的解决方案,而不仅仅是“清空”文件夹,那么我想出了一些可以与其他用例重新混合的方法。

/**
 * cleanCypressBuildCache will clean up build files that Cypress generates
 * before running tests. These are normally self-cleaned but if the build is interrupted
 * or dies during Cypress tests, then they'll remain forever. So we clean them up here.
 */
task cleanCypressBuildCache(type: Delete) {
    def cypressBuildFolder = System.getenv('APPDATA') + '/Cypress/cy/production/projects'
    def daysToKeepOldItems = 2

    description = 'Tidy up Cypress ' + cypressBuildFolder

    // Delete old folders / files
    def cutoff = new Date().minus(daysToKeepOldItems);
    def deleteList = []
    fileTree (dir: cypressBuildFolder).visit {
        def File file = it.file
        def shouldBeDeleted = new Date(file.lastModified()).before(cutoff)
        if (shouldBeDeleted) {
            deleteList << file
        }
    }
    // Not sure why, by `it.delete()` didn't work but `project.delete(it)` did.
    deleteList.each { project.delete(it) }
}