Linux find命令-regex参数用法及默认正则类型查询
关于find命令正则相关问题的解答
1. find命令的默认regextype类型
GNU版本find的默认正则类型是emacs,该语法和常用的POSIX扩展正则规则不同:分组符号()、多分支匹配符号|都需要加反斜杠转义才会被识别为正则特殊字符,未转义的情况下只会被当做普通字符匹配,这也是你最开始写的正则无法生效的核心原因。
2. 不指定regextype的缩短命令写法
直接适配默认的emacs正则语法,对特殊符号做转义即可,不需要额外加regextype参数,可行写法如下:
find -regex './\(\.git\|node_modules\|another-unwanted-dir\)' -prune -or -ls
补充说明:上面的写法里还对.git的点号做了转义,避免.作为正则通配符匹配到其他非预期的目录名,匹配精准度更高。
额外补充:find参数顺序的原理
find的参数是按从左到右的顺序逐个解析执行的,-regextype属于全局生效的正则类型设置参数,必须放在-regex参数之前才能作用于后续的正则匹配逻辑,放在-regex之后时,正则匹配已经执行完成,修改类型自然不会生效。
内容的提问来源于stack exchange,提问作者TomasJ
相关产品推荐
相关产品推荐

