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

Linux下如何查找扩展名包含日期格式数字的文件

解决Linux下查找带日期格式文件的问题

我来帮你搞定这个文件筛选的需求!你要找的是两种格式的文件:一种是结尾带.8位日期.4位数字(比如jvm-app-0.log.20180124.0000),另一种是仅以.8位日期结尾(比如access.log.20180124)。下面我给你正确的命令,顺便解释下你之前尝试的问题出在哪。

正确的查找命令

方式1:用find的正则匹配(推荐,支持递归查找)

find . -type f -regextype posix-extended -regex '.*\.[0-9]{8}([\.[0-9]{4})?$'

逐部分解释:

  • -type f:只查找文件,避免匹配到目录
  • -regextype posix-extended:启用扩展正则语法,这样我们可以使用{8}、()、?这些更灵活的元字符
  • 正则表达式部分:
    • .*:匹配文件路径和文件名的任意前缀(比如./或者./subdir/开头的部分)
    • \.[0-9]{8}:匹配一个点号后面紧跟8位数字(也就是你的日期部分,比如.20180124)
    • ([\.[0-9]{4})?$:这是可选的后缀部分,?表示前面的组可以出现0次或1次。也就是说,要么直接以8位日期结尾,要么在8位日期后面再加一个点号和4位数字结尾,完美覆盖你需要的两种文件格式。

方式2:find结合grep(适合熟悉grep的场景)

如果你更习惯用grep,也可以这样写:

find . -type f | grep -E '\.[0-9]{8}([\.[0-9]{4})?$'
  • grep -E:开启扩展正则模式,和find的posix-extended作用类似
  • 正则部分和上面一致,专门匹配文件名中的日期格式

方式3:仅查找当前目录(不递归)

如果不需要递归子目录,直接用ls加grep更简单:

ls | grep -E '\.[0-9]{8}([\.[0-9]{4})?$'

你之前尝试的命令问题在哪?

  • 第一个命令find . * | grep "*.[0-9]{8}.*":
    • find . *里的*是多余的,会导致find把当前目录下的文件/目录作为参数,而不是递归查找
    • grep里的*是shell通配符,不是正则的“任意字符”,应该用.*
    • {8}需要-E参数才能生效,否则grep会把它当成普通字符处理
  • 第二个find正则命令:
    • find的-regex是匹配整个文件路径(比如./jvm-app-0.log.20180124.0000),所以不能用*开头,必须用.*来匹配前面的路径部分
    • 正则语法也没写对,缺少了可选后缀的逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:22:51