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

嵌入式板卡statuslogs日志按年合并压缩脚本实现咨询

嘿,你的这个日志合并压缩思路没问题,但重复写每一年的命令确实有点麻烦,我给你几个更高效的优化方案,让脚本更简洁灵活:

优化日志合并压缩脚本的方案

方式一:用循环简化连续年份的处理

如果需要处理的年份是连续的(比如你提到的2017到2020),用bash循环就能一次性搞定,不用重复写相同的命令:

for year in {2017..2020}; do
    gzip -c statuslogs/daily_status_"${year}"*.log > status_"${year}".gz
done

后续如果要新增年份,只要调整循环里的年份范围(比如{2017..2024})就行,非常方便。

方式二:自动识别现有日志的年份

如果不确定有哪些年份的日志,或者年份不连续,我们可以先自动提取日志文件名里的年份,去重后再批量处理:

# 从所有日志文件名中提取年份并去重
years=$(ls statuslogs/daily_status_*.log | sed -E 's/.*daily_status_([0-9]{4}).*/\1/' | sort -u)

# 遍历每个年份合并压缩
for year in $years; do
    gzip -c statuslogs/daily_status_"${year}"*.log > status_"${year}".gz
done

这个方法会自动识别statuslogs文件夹里所有存在的日志年份,完全不用手动指定,灵活性拉满。

特殊场景处理:日志文件过多的情况

如果某一年的日志文件数量特别多,直接用通配符可能会触发“命令行参数过长”的错误,这时候可以用find命令配合cat来解决:

for year in {2017..2020}; do
    find statuslogs -name "daily_status_${year}*.log" -exec cat {} + | gzip > status_"${year}".gz
done

-exec cat {} +会把所有匹配的日志文件内容合并后再传给gzip,完美避开参数过长的问题。

内容的提问来源于stack exchange,提问作者md.jamal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:34:26