You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

执行find命令匹配日志文件时报Invalid preceding regular expression错误如何解决

报错原因

  • 正则语法混用了shell通配符和POSIX扩展正则规则:正则中*是匹配前一个字符0次或多次的量词,你直接将*放在正则开头,没有前置匹配字符,直接触发语法报错。
  • 你指定了posix-extended正则类型,该模式下匹配重复次数的花括号{}不需要加反斜杠转义,额外转义也会导致语法校验失败。
  • 正则中.是匹配任意字符的元字符,你要匹配文件名中字面量的.,需要转义为\.,否则匹配逻辑也不符合预期。
  • 额外注意:find的-regex参数是匹配文件的完整路径,不是只匹配文件名,所以开头需要覆盖路径前缀的匹配规则。

修正后的命令

方法1:保持使用正则匹配

find . -regextype posix-extended -regex '.*\.log\.[0-9]{1,3}$' -exec gzip -9 {} \;

修正点说明:

  • 开头加.*匹配任意前缀路径
  • 用\.匹配字面量的点符号
  • 移除花括号的转义符,符合POSIX扩展正则语法

方法2:用-name参数更简单(更适合文件名匹配场景)

find . -name "*.log.[0-9]*" ! -name "*.gz" -exec gzip -9 {} \;

这个写法不需要处理正则语法,额外加了! -name "*.gz"规则,避免误压已经完成压缩的.gz格式日志文件。


内容的提问来源于stack exchange,提问作者aphabeta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.14 13:24:04