Ubuntu 20.04下find命令特殊字符匹配异常问题求助
关于Ubuntu 20.04中find命令的两个问题解答
问题1:查找以g结尾的隐藏文件失败的原因
find ./Dico -name "*g"生效是因为*是shell通配符,匹配任意长度的任意字符(包括空),能覆盖所有非隐藏的以g结尾的文件。find ./Dico -name ".*g"无效的核心原因:-name使用的是shell glob规则,不是正则。这里.*匹配以点开头,后面跟任意字符序列,最终要求文件名以g结尾。如果目录里没有符合“以.开头且最后一个字符是g”的文件,自然无结果;若隐藏文件名是.abc.g这类中间带点的,该模式本应匹配,但前提是存在这类文件。find ./Dico -name ".*g$"完全无效是因为glob规则里没有$作为行尾锚点的语法,$在这里是普通字符,这个命令实际是找文件名以.xxxg$结尾的文件,显然不存在。
问题2:正则特殊字符不生效的解决方法
-name参数只支持shell glob通配符,不支持正则表达式的+、\d、{n}这类语法,要实现复杂匹配得用-regex参数(默认是Emacs风格正则):
- 匹配以数字开头后跟恰好5个小写字母的文件(注意
-regex匹配的是整个文件路径,不是仅文件名):find ./Dico -regex "./Dico/[0-9][a-z]{5}" - 如果只想匹配文件名,不想包含路径部分,可以用
-regextype指定POSIX扩展正则风格:find ./Dico -regextype posix-extended -regex ".*/[0-9][a-z]{5}" - 要是坚持用
-name,只能用glob的基础写法,把5个小写字母逐个写出来:find ./Dico -name "[0-9][a-z][a-z][a-z][a-z][a-z]"
内容的提问来源于stack exchange,提问作者Artemis
相关产品推荐
相关产品推荐

