You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Groovy查找含指定子目录的目标文件路径方案咨询

解决Groovy中精准匹配包含指定子目录的文件路径问题

嘿,我来帮你搞定这个Groovy路径匹配的问题!你需要的是在指定basedir下,找到**必须包含指定子目录SUBDIRNAMEWEKNOW**且文件名为filename.xml的路径,之前的写法返回多余结果是因为匹配范围太宽了,下面给你两种靠谱的解决方案:

方案一:用Ant风格路径模式(推荐,简洁易读)

Groovy的FileNameFinder本身支持Ant风格的路径匹配,我们只需要调整匹配模式,确保路径中必须包含目标子目录即可:

def basedir = "/你的基础目录路径"
def targetSubdir = "SUBDIRNAMEWEKNOW"
// 核心模式:**/目标子目录/**/filename.xml
def file_paths = new FileNameFinder().getFileNames(basedir, "**/${targetSubdir}/**/filename.xml")

模式解释:

  • **/:匹配任意层级的目录(包括当前目录的父级、子级)
  • ${targetSubdir}/:强制路径中必须包含指定的子目录
  • 后面的**/filename.xml:匹配目标子目录下任意层级中的filename.xml文件

这个写法会精准过滤掉所有不包含SUBDIRNAMEWEKNOW的路径,只返回符合要求的结果。

方案二:用正则表达式(适合复杂匹配场景)

如果你一定要用FileNameByRegexFinder,可以写一个精准的正则表达式,确保路径中包含目标子目录,且文件名正确:

def basedir = "/你的基础目录路径"
// 正则匹配:路径中包含SUBDIRNAMEWEKNOW目录,且以filename.xml结尾
def regex = /.*[/\\]SUBDIRNAMEWEKNOW[/\\].*[/\\]filename\.xml$/
def file_paths = new FileNameByRegexFinder().getFileNames(basedir, regex)

正则解释:

  • .*:匹配任意长度的字符(除换行)
  • [/\\]:兼容Windows和Linux的路径分隔符(/或\,正则中\需要转义成\)
  • SUBDIRNAMEWEKNOW:指定的目标子目录名
  • filename\.xml$:确保路径结尾是filename.xml(注意.在正则中要转义成.,$表示匹配字符串末尾)

如果要更严谨地避免匹配到包含目标子目录名的其他目录(比如SUBDIRNAMEWEKNOW_test),可以把正则调整为:

def regex = /(^|.*[/\\])SUBDIRNAMEWEKNOW([/\\].*|[/\\])filename\.xml$/

小提示

优先用方案一的Ant模式,因为它不需要处理正则的转义问题,代码可读性更高,Groovy对Ant路径模式的支持也非常成熟。

内容的提问来源于stack exchange,提问作者youtube2019

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 08:07:46