如何在Linux脚本中保留Example.log最近14天的日志?
保留日志最近14天内容的脚本实现
核心思路
先计算出14天前的日期作为阈值,逐行读取日志并提取每行日期,仅保留日期晚于(或等于)阈值的行。
具体命令与脚本实现
1. 计算14天前的阈值日期
用date命令生成和日志格式一致的日期字符串:
threshold=$(date -d "-14 days" +%Y-%m-%d)
该命令会输出类似2024-03-11的结果(以当前日期2024-03-25为例),并赋值给变量threshold。
2. 用awk过滤日志
无需额外cut命令,awk可直接提取日期并完成比较:
awk -v threshold="$threshold" '{ # 提取日志行中的日期:从第2个字符开始取10位,即[YYYY-MM-DD里的YYYY-MM-DD log_date = substr($0, 2, 10) # YYYY-MM-DD格式的字符串可直接按字典序比较,保留符合条件的行 if (log_date >= threshold) print $0 }' Example.log > filtered.log
执行后,filtered.log中即为最近14天的日志内容。
3. 替换原日志(可选)
确认过滤结果无误后,可将过滤后的文件替换原日志:
mv filtered.log Example.log
整合为test.sh脚本
把上述命令整合成完整可执行脚本:
#!/bin/bash # 计算14天前的日期阈值 threshold=$(date -d "-14 days" +%Y-%m-%d) # 过滤日志到临时文件 awk -v threshold="$threshold" '{ log_date = substr($0, 2, 10) if (log_date >= threshold) print $0 }' Example.log > temp.log # 替换原日志 mv temp.log Example.log echo "日志已更新,仅保留最近14天内容"
给脚本添加执行权限:chmod +x test.sh,运行./test.sh即可完成操作。
补充说明
- awk的
substr函数直接从字符串提取指定部分,比单独用cut更高效简洁。 YYYY-MM-DD格式的字符串字典序与时间顺序一致,直接用>=即可准确判断日期是否在阈值范围内。- 先输出到临时文件再替换原日志,可避免误删有效内容。
内容的提问来源于stack exchange,提问作者Cristian
相关产品推荐
相关产品推荐

