2014-03-06 148 views
0

我有以下文件夹/文件。删除空目录或文件夹/子文件夹

 
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 } 

没有工作

我不想用摇篮>呼叫>蚂蚁的方式进行,会是我最后的手段。另外,不要通过为每个空文件夹写入明确的删除语句来删除每个空文件夹。

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

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

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

回答

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() } 
} 
+0

感谢迈克,我想试试。 –

1

如果你想删除所有文件夹本身只包含空文件夹,这段代码可能会有所帮助。

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() } 
相关问题