我有以下文件夹/文件。
A/B/C/D/giga.txt A/BB/ A/CC/DD/fifa.jpg A/ZZZ/1/a.txt A/ZZZ/2/b.png A/ZZZ/3/
如何在Gradle / Groovy中编码以仅删除空目录/子文件夹。 即删除上述示例中的“A / BB”,“A / ZZZ / 3”。真实案例有很多这样的文件夹。
我试过
tasks.withType(Delete) { includeEmptyDirs = true }
无效
tasks.withType(Delete) { includeEmptyDirs = false }
无效
我不想使用Gradle>打电话>蚂蚁方式,这是我的最后手段。此外,不希望通过为每个空文件夹写明确的删除语句来删除每个空文件夹。
案例2: 如果我运行以下内容:
delete fileTree (dir: "A", include: "**/*.txt")
以上cmd将删除文件夹A下的任何.txt文件及其下的任何子文件夹。现在,这将使“A / ZZZ / 1”成为“空文件夹”的有效候选者,我也想删除它。
答案 0 :(得分:3)
使用Javadoc for FileTree,请考虑以下内容删除“A”下的空目录。使用Gradle 1.11:
task deleteEmptyDirs() {
def emptyDirs = []
fileTree (dir: "A").visit { def fileVisitDetails ->
def file = fileVisitDetails.file
if (file.isDirectory() && (file.list().length == 0)) {
emptyDirs << file
}
}
emptyDirs.each { dir -> dir.delete() }
}
答案 1 :(得分:2)
如果要删除本身仅包含空文件夹的所有文件夹,此代码可能会有所帮助。
def emptyDirs = []
project.fileTree(dir: destdir).visit {
def 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 { it.delete() }