Gradle打印文件夹中的目录 - X级别

时间:2014-07-23 18:17:54

标签: gradle structure directory depth

我在构建文件夹下有以下文件夹结构(在Gradle构建期间可以获得):

CDROM/disk1
CDROM/disk1/disk1file1a.txt
CDROM/disk1/disk1file1b.txt

CDROM/disk2/disk2file2a.txt
CDROM/disk2/disk2file2btxt
CDROM/disk2/disk2folder2x
CDROM/disk2/disk2folder2y

CDROM/disk3
CDROM/disk3/disk3
CDROM/disk3/disk33
CDROM/disk3/disk33/disk3


CDROM/folder1

CDROM/file1.txt

我如何告诉Gradle告诉我以下内容:

  1. 仅打印文件夹“CDROM”中的顶级/直接子文件夹(仅限) 即它应该只打印disk1,disk2,disk3和folder1

  2. 仅打印具有磁盘模式[0-9]的顶级/直接子文件夹(仅限),即diskX,其中X是数字。
    即它应该只打印disk1,disk2和disk3

  3. 以下将会这样做,但我认为应该有一种有效的方法来实现相同的,并且可以定义模式,而不必使用我在下面使用的“IF”语句。

    FileTree dirs = fileTree (dir: "$buildDir/CDROM", include: "disk*/**")
    
            dirs.visit { FileVisitDetails fd ->
    
                    if (fd.directory && fd.name.startsWith('disk')){
    
                            println "------  $buildDir/CDROM_Installers/${fd.name}   ---------------"
    
                    }
    
            }
    

1 个答案:

答案 0 :(得分:7)

如果您只指CDROM的直接孩子,那么顶级应该是这样的:

new File("${buildDir}/CDROM").eachDir{ if(it.name ==~/disk.*/) println it}

如果您想要更深入地控制深度和其他内容,那么您可以尝试以下代码的变体:

new File("${buildDir}/CDROM").traverse( [maxDepth: 2, filter: ~/.*disk\d/, 
                                        type: groovy.io.FileType.DIRECTORIES]){
   println it // or do whatever
}

有关详细信息,请参阅traverse