我正在寻找一些机制,可以让我对目录中与特定模式匹配的每个文件执行操作。
我目前正在尝试让fileTree以这种方式工作。
def srcDir = 'myDir'
def includePattern = '*'
def tree = fileTree(srcDir) {
include includePattern
}
tree.visit { d ->
logger.info(d.file)
}我的目录如下所示:
myDir/file1
myDir/file2
myDir/subDir/file3我想要输出的内容是:
/../myDir/file1
/../myDir/file2当然,subDir也符合* include模式。所以它会被包含在结果中。
我怎么能只访问文件?
发布于 2020-12-03 15:16:50
我能想到的最好的方法仍然适用于包含模式(如果需要还可以排除),那就是在pattern闭包中添加一个if。
def srcDir = 'myDir'
def includePattern = '*'
def tree = fileTree(srcDir) {
include includePattern
}
tree.visit { d ->
if (!d.file.isDirectory()) {
logger.info(d.file)
}
}发布于 2020-12-02 16:12:05
如果您不想执行递归扫描,而只是扫描单个目录,则可以执行类似于eachFileMatch的操作
import static groovy.io.FileType.*
new File('myDir').eachFileMatch FILES, ~/.*/, { f ->
println f.name
}它将打印:
─➤ groovy solution.groovy 1 ↵
file2
file1其中,f是java.io.File,~/.*/是与文件名匹配的regular expression。.*表示任何字符,零次或多次。比方说,为了匹配.txt扩展,您可以执行类似于~/.*\.txt/的操作。
发布于 2020-12-02 19:57:07
考虑一下:
def srcDir = 'myDir'
task go() {
doFirst {
new File(srcDir).eachFileRecurse { f ->
if (f.isFile()) {
println f.absolutePath.replaceAll("${projectDir}", "/..")
}
}
}
}这是通过gradle go调用的。
https://stackoverflow.com/questions/65104229
复制相似问题