我在构建文件夹下有以下文件夹结构(在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告诉我以下内容:
仅打印文件夹“CDROM”中的顶级/直接子文件夹(仅限) 即它应该只打印disk1,disk2,disk3和folder1
仅打印具有磁盘模式[0-9]的顶级/直接子文件夹(仅限),即diskX,其中X是数字。
即它应该只打印disk1,disk2和disk3
以下将会这样做,但我认为应该有一种有效的方法来实现相同的,并且可以定义模式,而不必使用我在下面使用的“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} ---------------"
}
}
答案 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。