我正在使用Gradle,并希望删除具有特定扩展名的所有文件。那是Gradle能做的吗?
答案 0 :(得分:49)
使用Gradle Delete
任务。
task deleteFiles(type: Delete) {
delete fileTree('dir/foo') {
include '**/*.ext'
}
}
答案 1 :(得分:4)
您可以自定义默认clean
任务,以包含其他目录和文件以供删除,如:
clean{
delete 'buildDir', 'generated'
}
如果你想使用glob,你可以使用fileTree
或任何其他方便的方法来列出文件:
clean{
delete 'build', 'target', fileTree(dockerBuildDir) { include '**/*.rpm' }
}
答案 2 :(得分:2)
有几种方法可以删除具有特定扩展名的文件。通常,您必须选择一些文件;然后过滤其中一些文件,最后删除提醒文件。例如,试试这个:
def tree = fileTree('${SOME_DIR}')
tree.include '**/*.${SOME_EXT}'
tree.each { it.delete() }
答案 3 :(得分:0)
clean {
delete xxxx
}
以上清洁不是很正确。因为它实际上是通过任务名称调用名为clean
的方法。这种方法通常用于配置任务,它发生在配置时间而不是任务执行时间。
如果需要修改默认清除,以下是更合理的方法。这是我的示例,删除除一个排除文件以外的所有文件。清除任务中的删除操作实际上确实在任务执行时间发生。
clean {
Task self = delegate
self.deleteAllActions()
self << {
project.delete(fileTree(dir: buildDir).exclude("**/tmp/expandedArchives/org.jacoco.agent*/**"))
def emptyDirs = []
project.fileTree(dir: buildDir).visit {
File f = it.file
if (f.isDirectory() ) {
def children = project.fileTree(f).filter { it.isFile() }.files
if (children.size() == 0) {
emptyDirs << f
}
}
}
// reverse so that we do the deepest folders first
emptyDirs.reverseEach {
println "delete file: " + it + ", " + project.delete(it) //it.delete()
}
}
}