Regex Groovy仅在知道路径的情况下获取具有特定结尾的文件名
我在Jenkins文件中使用groovy。gradle构建创建了一个如下所示的jar:Regex Groovy仅在知道路径的情况下获取具有特定结尾的文件名,regex,groovy,Regex,Groovy,我在Jenkins文件中使用groovy。gradle构建创建了一个如下所示的jar:appName-1.0.0-ua67435.jar,并复制到/opt/appName 在Jenkinsfile(Groovy)中,我现在希望将字符串的这一部分1.0.0-ua67435放在变量中。我希望这个正则表达式能够完成这项工作:-(.*).jar$ 我知道我的文件在哪里,但我不知道它的名字。它是/opt/appName/-文件夹中唯一的.jar 当我只知道文件名的位置和名称模式时,如何获取文件名的子字符串
appName-1.0.0-ua67435.jar
,并复制到/opt/appName
在Jenkinsfile(Groovy)中,我现在希望将字符串的这一部分1.0.0-ua67435
放在变量中。我希望这个正则表达式能够完成这项工作:-(.*).jar$
我知道我的文件在哪里,但我不知道它的名字。它是/opt/appName/
-文件夹中唯一的.jar
当我只知道文件名的位置和名称模式时,如何获取文件名的子字符串?试试以下方法:
new File("/opt/appName/").eachFileMatch(FileType.FILES, ~/^.*-.*?.jar$/, { println it.name })
它用于将名称与特定模式匹配,您可以从文档链接中看到更多示例
如果不允许导入,则使用这样的完整限定名
…每个文件匹配(groovy.io.FileType.FILES,…
尝试以下操作:
new File("/opt/appName/").eachFileMatch(FileType.FILES, ~/^.*-.*?.jar$/, { println it.name })
它用于将名称与特定模式匹配,您可以从文档链接中看到更多示例
如果不允许导入,则使用这样的完整限定名
…每个文件匹配(groovy.io.FileType.FILES,…
您可以使用
def names = []
new File("/opt/appName/").eachFileMatch groovy.io.FileType.FILES, ~/(?<=appName-).*(?=[.]jar$)/, { names << it.name }
def name=[]
新文件(“/opt/appName/”)。每个文件匹配groovy.io.FileType.FILES,~/(?您可以使用
def names = []
new File("/opt/appName/").eachFileMatch groovy.io.FileType.FILES, ~/(?<=appName-).*(?=[.]jar$)/, { names << it.name }
def name=[]
新文件(“/opt/appName/”)。每个文件匹配groovy.io.FileType.FILES,~/(?您可以FileNameFinder
类轻松找到它:
println new FileNameFinder().getFileNames(folderPath, '**/appName*.jar').collect{ it.substring(it.lastIndexOf('/')+1, it.size())}
您可以FileNameFinder
class轻松找到它:
println new FileNameFinder().getFileNames(folderPath, '**/appName*.jar').collect{ it.substring(it.lastIndexOf('/')+1, it.size())}
你的意思是想从字符串/opt/appName/appName-1.0.0-ua67435.jar
中获取字符串appName-1.0.0-ua67435.jar
?是的,但不知道appName-************************.jar
的确切名称。我只喜欢未知部分。你可以检查答案。你的意思是想获取字符串appName-1.0.0-ua67435.jar
来自字符串/opt/appName/appName-1.0.0-ua67435.jar
?是的,但不知道appName-************************.jar的确切名称。我更喜欢未知部分,但仅限于此。您可以检查答案。如何在变量中获取该名称?@SWiggels它。name
是您想要的名称。我在导入FileType.FILE时遇到问题jenkins似乎甚至不喜欢导入。import static groovy.io.FileType.FILES新文件($destDir”).eachFileMatch(FileType.FILES,~/^.*-.*?.jar$/,{println It.name})
导致groovy.lang.MissingPropertyException:没有这样的属性:类的文件类型:groovy.lang.Binding
好的,我得到了解决方案。也非常感谢@Wiktor!问题是,在运行脚本时,它要求批准。在它说它没有权限之后,我不得不另一次批准其他方法。我必须这样做3次mes在一行中。谢谢大家!我如何在变量中获得该名称?@SWiggelsit.name
是您想要的名称。我在FileType.FILES中遇到导入问题。詹金斯似乎甚至不喜欢导入。import static groovy.io.FileType.FILES新文件($destDir”).eachFileMatch(FileType.FILES,~/^.-.*jar$/,{println it.name})
导致groovy.lang.MissingPropertyException:没有这样的属性:类的文件类型:groovy.lang.Binding
好的,我得到了解决方案。也非常感谢@Wiktor!问题是,在运行脚本时,它要求批准。在它说它没有权限之后,我不得不另一次批准其他方法。我必须这样做3次mes排成一行。谢谢大家!Jenkins不允许静态导入。另外,baseDir
是未知的。@SWiggels这是文档中的一个示例片段。我刚刚更改了那里的正则表达式。baseDir
应该用“/opt/appName/”初始化
,当然。org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException:不允许使用staticMethod的脚本
是我从运行它中得到的。按照Aristtl建议的方式尝试。Aristtls版本也需要导入。因此它也不起作用。:(Jenkins不允许静态导入。另外,baseDir
是未知的。@SWiggels这是文档中的一个示例片段。我刚刚在那里更改了正则表达式。baseDir
应该用“/opt/appName/”初始化
,当然。org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException:不允许使用staticMethod的脚本
是我从运行它中得到的。按照Aristtl建议的方式尝试。Aristtls版本也需要导入。因此它也不起作用。:(如果您使用从机,则在管道中使用FileNameFinder
是危险的。带有文件的所有内容仅在主机上执行。如果您使用从机,请参阅在管道中使用FileNameFinder
是危险的。带有文件的所有内容仅在主机上执行。请参阅