首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >fileTree访问排除目录

fileTree访问排除目录
EN

Stack Overflow用户
提问于 2020-12-02 16:01:31
回答 3查看 158关注 0票数 0

我正在寻找一些机制,可以让我对目录中与特定模式匹配的每个文件执行操作。

我目前正在尝试让fileTree以这种方式工作。

代码语言:javascript
复制
def srcDir = 'myDir'
def includePattern = '*'
def tree = fileTree(srcDir) {
    include includePattern
}

tree.visit { d ->
    logger.info(d.file)
}

我的目录如下所示:

代码语言:javascript
复制
myDir/file1
myDir/file2
myDir/subDir/file3

我想要输出的内容是:

代码语言:javascript
复制
/../myDir/file1
/../myDir/file2

当然,subDir也符合* include模式。所以它会被包含在结果中。

我怎么能只访问文件?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-12-03 15:16:50

我能想到的最好的方法仍然适用于包含模式(如果需要还可以排除),那就是在pattern闭包中添加一个if。

代码语言:javascript
复制
def srcDir = 'myDir'
def includePattern = '*'
def tree = fileTree(srcDir) {
    include includePattern
}

tree.visit { d ->
    if (!d.file.isDirectory()) {
        logger.info(d.file)
    }
}
票数 0
EN

Stack Overflow用户

发布于 2020-12-02 16:12:05

如果您不想执行递归扫描,而只是扫描单个目录,则可以执行类似于eachFileMatch的操作

代码语言:javascript
复制
import static groovy.io.FileType.* 

new File('myDir').eachFileMatch FILES, ~/.*/, { f -> 
  println f.name
}

它将打印:

代码语言:javascript
复制
─➤ groovy solution.groovy                                                                                          1 ↵
file2
file1

其中,fjava.io.File~/.*/是与文件名匹配的regular expression.*表示任何字符,零次或多次。比方说,为了匹配.txt扩展,您可以执行类似于~/.*\.txt/的操作。

票数 0
EN

Stack Overflow用户

发布于 2020-12-02 19:57:07

考虑一下:

代码语言:javascript
复制
def srcDir = 'myDir'

task go() {
    doFirst {
        new File(srcDir).eachFileRecurse { f ->
            if (f.isFile()) {
                println f.absolutePath.replaceAll("${projectDir}", "/..")
            }
        }
    }
}

这是通过gradle go调用的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65104229

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档