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

Groovy使用findFiles方法仅获取文件名而非完整路径失效问题的解决思路

解决Groovy findFiles无法获取文件名的问题

我来帮你梳理下这个问题的可行解决思路,大概率是因为对findFiles返回对象的属性使用方式或者环境细节没匹配上:

  • 先确认返回对象的属性细节
    首先可以先打印出findFiles返回的文件对象的完整信息,看看它到底包含哪些属性,避免误解对象类型:

    def dateien = findFiles(glob: "**/xx/xx/xx/*.zip")
    dateien.each { it ->
        echo "完整文件对象:${it}"
        echo "对象所有属性:${it.properties}"
    }
    

    如果是Jenkins Pipeline环境下,findFiles返回的是FileWrapper类型,它的name属性理论上是存在的,但有时候会因为Pipeline的脚本沙箱限制或者版本差异导致属性访问异常,这时候可以换个更稳妥的方式提取文件名。

  • 手动从路径中提取文件名
    不管返回对象的属性是否可用,都可以通过路径字符串来手动截取文件名,这是不受环境限制的通用方法:

    def dateien = findFiles(glob: "**/xx/xx/xx/*.zip")
    dateien.each { file ->
        // 方式1:用File类解析路径
        def fileName = new File(file.path).name
        // 方式2:用字符串分割截取最后一段(适合Unix类路径)
        // def fileName = file.path.split('/').last()
        echo "upload file ${fileName} to ${trgDir}"
        upload(serverId, fileName, "${trgDir}${fileName}")
    }
    

    这两种方式都能从完整路径中精准提取到最后的文件名,不会受对象属性的限制。

  • 检查glob匹配的有效性
    另外可以先确认dateien数组是否真的匹配到了目标文件,比如先打印数组的基础信息:

    echo "找到的文件数量:${dateien.size()}"
    echo "找到的文件路径:${dateien*.path}"
    

    如果数组为空或者路径不符合预期,那就要先调整glob表达式,确保能正确匹配到你要的zip文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 20:52:40