如何在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
相关产品推荐
相关产品推荐

