2014-03-06 146 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() } 
相關問題