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

Shell脚本中如何用正则匹配含固定日期戳与可变时间戳的日志文件

文件名通配匹配解决方案

问题核心

需要匹配格式为backup_<主机名>_<8位日期戳><4位可变数字时间戳>.log的文件,已知日期戳,需精确匹配后续4位可变时间戳。

正确通配符写法

1. 基础正则匹配(兼容所有POSIX Shell)

直接用4个[0-9]精确匹配4位数字,无需额外配置:

log_file_pattern="backup_${hostname_arg}_${logfile_sunday}[0-9][0-9][0-9][0-9].log"

2. Bash扩展通配符(更简洁)

先开启Bash扩展通配符支持:

shopt -s extglob

然后可选择两种简洁写法:

  • 匹配任意4个字符(结合场景仅匹配数字):
log_file_pattern="backup_${hostname_arg}_${logfile_sunday}????.log"
  • 严格匹配4位数字:
log_file_pattern="backup_${hostname_arg}_${logfile_sunday}[0-9]{4}.log"

之前写法的问题

  • [0-9]*:会匹配1个及以上任意数字,可能匹配超过4位的情况,甚至误匹配带多余字符的文件。
  • {....}:这是Shell的大括号扩展语法,会生成字面量的....,而非通配符匹配,因此无法生效。

文件存在检测示例

# 示例变量赋值
hostname_arg="myserver"
logfile_sunday="20231015"

# 定义匹配模式
log_file_pattern="backup_${hostname_arg}_${logfile_sunday}[0-9][0-9][0-9][0-9].log"

# 检测是否存在匹配文件
if compgen -G "$log_file_pattern" > /dev/null; then
    echo "找到符合条件的备份文件"
else
    echo "未找到符合条件的备份文件"
fi

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 09:56:14