【问题标题】:Delete EMPTY Directory or folders / subfolders删除 EMPTY 目录或文件夹/子文件夹
【发布时间】:2014-03-06 03:06:27
【问题描述】:

我有以下文件夹/文件。

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 > 调用 > Ant 方式,因为那将是我最后的手段。此外,不要通过为每个空文件夹编写显式删除语句来删除每个空文件夹。

案例 2: 如果我运行以下命令:

delete fileTree (dir: "A", include: "**/*.txt")

上面的 cmd 将删除文件夹 A 下的任何 .txt 文件及其下的任何子文件夹。现在,这将使“A/ZZZ/1”成为我想要删除的“空文件夹”的有效候选者。

【问题讨论】:

    标签: file gradle directory isnullorempty


    【解决方案1】:

    使用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() }
    }
    

    【讨论】:

    • 谢谢 Mike,我会试试的。
    • 对于没有实际删除目录的情况,将it.delete() 替换为project.delete(it) 可以解决此问题。就我而言,我正在删除空的源目录。
    • 这将删除最深的空目录,但不会删除包含它们的目录。
    【解决方案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() }
    

    【讨论】:

    • 对于没有实际删除目录的情况,将it.delete() 替换为project.delete(it) 可以解决此问题。就我而言,我正在删除空的源目录。
    猜你喜欢
    • 2010-11-12
    • 1970-01-01
    • 2013-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多