删除EMPTY目录或文件夹/子文件夹

时间:2014-03-06 03:06:28

标签: file gradle directory isnullorempty

我有以下文件夹/文件。

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”成为“空文件夹”的有效候选者,我也想删除它。

2 个答案:

答案 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() }