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

如何在Groovy中调用Shell获取目录名并遍历?

解决Groovy中获取文件夹名称而非绝对路径的问题

方法一:通过Shell命令直接返回文件夹名称

修改shell脚本,借助basename命令直接提取每个路径的文件夹名称,无需在Groovy中额外处理:

def folderlocation = "/root/var/*/"
List folderNames = sh(script: "ls -d ${folderlocation} | xargs basename", returnStdout: true).trim().split('\\n')

for(fldr in folderNames){
    println(fldr) // 输出示例:lib、log、cache等
}

xargs basename会将ls输出的每个绝对路径传递给basename命令,直接返回对应的文件夹名称。

方法二:在Groovy中处理路径字符串

如果不想修改原有shell命令,可以在Groovy层面对路径字符串做解析,提取目标文件夹名:

方式1:利用Groovy的File类

Groovy的File类内置了路径解析能力,能直接获取最后一级目录名称:

def folderlocation = "/root/var/*/"
List folderPaths = sh(script: "ls -d ${folderlocation}", returnStdout: true).trim().split('\\n')

for(path in folderPaths){
    def folderName = new File(path).name
    println(folderName)
}

new File(path).name会自动忽略路径末尾的斜杠,返回纯文件夹名称。

方式2:字符串分割处理

通过字符串操作手动提取最后一段文件夹名:

def folderlocation = "/root/var/*/"
List folderPaths = sh(script: "ls -d ${folderlocation}", returnStdout: true).trim().split('\\n')

for(path in folderPaths){
    // 先移除路径末尾的斜杠,再按斜杠分割取最后一个元素
    def folderName = path.replaceAll('/$', '').split('/')[-1]
    println(folderName)
}

replaceAll('/$', '')用于清除路径末尾可能存在的斜杠,split('/')[-1]取分割后的最后一个元素,即目标文件夹名。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 22:40:00