Jenkins流水线如何列出指定文件夹下的所有文件
Jenkins Pipeline 列出指定文件夹内所有文件的实现方案
你现有代码已经能定位到MyScripts文件夹,要获取该文件夹内的所有文件,直接利用findFiles的通配符路径匹配能力即可,两种常用实现方式:
- 直接定向匹配(推荐,性能更好)
不需要遍历根目录所有文件,直接给findFiles传入目标路径的通配符,就能直接拿到MyScripts下的所有内容:
stage('Clone and Upload') { steps { git branch: params.GIT_BRANCH, credentialsId: 'my-bitbucket-id', url: params.GIT_REPO script { // 递归匹配MyScripts下所有层级的文件,**表示任意子目录,*表示任意文件 def targetFiles = findFiles glob: 'MyScripts/**/*' targetFiles.each { f -> // 过滤掉子目录,只输出文件;如果需要连子目录一起列可以去掉这个判断 if (!f.directory) { echo "文件路径:${f.path},文件大小:${f.length} bytes" } } } } }
- 基于现有逻辑拓展
如果要保留你原来遍历根目录定位文件夹的逻辑,在匹配到MyScripts文件夹后,拼接该文件夹的路径二次调用findFiles即可:
stage('Clone and Upload') { steps { git branch: params.GIT_BRANCH, credentialsId: 'my-bitbucket-id', url: params.GIT_REPO script { def files = findFiles excludes: '', glob: '' files.each { f -> if (f.directory && f.name == 'MyScripts'){ echo "Folder: $f.name" // 遍历当前找到的MyScripts文件夹下的所有内容 def innerFiles = findFiles glob: "${f.path}/**/*" innerFiles.each { innerFile -> if (!innerFile.directory) { echo "MyScripts内文件:${innerFile.path}" } } } } } } }
通配符说明:如果只需要获取
MyScripts根目录下的文件、不需要递归遍历它的子文件夹,把glob参数里的**/*替换成*即可。
内容的提问来源于stack exchange,提问作者Krupal Ghorpade
相关产品推荐
相关产品推荐

