Linux下如何用find正则匹配路径最后斜杠后的指定.properties文件
解决find命令仅匹配目标文件名的问题
原命令返回全部3个文件的原因是正则匹配了整个路径字符串,路径里的/foo-service/包含foo,导致any.properties被误匹配。要只针对最后一个斜杠后的文件名做匹配,需要调整正则表达式,锚定到文件名部分。
修正后的find命令
find /home/user/foo-service/src/main/resources/ -maxdepth 1 \ -regextype posix-extended -regex '.*/(foo|bar)[^/]*\.properties'
命令解释
.*/:匹配路径中最后一个斜杠之前的所有内容,确保后续正则只作用于文件名部分(foo|bar):限定文件名必须以foo或bar开头[^/]*:匹配文件名中除斜杠外的任意字符(保证仅匹配文件名内部内容)\.properties:匹配以.properties结尾的文件
执行后会精准返回/home/user/foo-service/src/main/resources/foo-service.properties和/home/user/foo-service/src/main/resources/bar-service.properties的绝对路径,自动排除any.properties。
更简洁的替代写法(用-name直接匹配文件名)
如果觉得路径正则处理繁琐,可直接用-name选项仅针对文件名匹配:
find /home/user/foo-service/src/main/resources/ -maxdepth 1 \ -regextype posix-extended -name '(foo|bar)[^/]*\.properties'
-name默认只匹配文件名,无需处理路径前缀,写法更直观。
内容的提问来源于stack exchange,提问作者DenisB
相关产品推荐
相关产品推荐

