编写bash脚本汇总clamscan多目录扫描日志的感染文件总数量
ClamAV多扫描段感染文件数求和方案
核心统计命令
直接用awk即可实现任意数量扫描段的感染数值自动累加,无需修改逻辑即可适配后续新增的扫描目录:
# 替换scan.log为你的实际日志文件路径 awk '/^Infected files:/ {sum += $3} END {print sum+0}' scan.log
命令说明:
- 自动匹配日志中所有以
Infected files:开头的行 - 提取每行第三列的数值累加求和
- 末尾加
+0是为了兼容无匹配行的场景,确保输出为数字0而非空值
完整可用脚本示例
适配你现有发邮件、后续取消无感染通知的需求:
#!/bin/bash # 配置项,按实际情况修改 SCAN_LOG_PATH="/your/path/to/clamscan.log" ALERT_EMAIL="your@admin.email" # 计算总感染数 TOTAL_INFECT=$(awk '/^Infected files:/ {sum += $3} END {print sum+0}' "${SCAN_LOG_PATH}") # 告警逻辑 if [ ${TOTAL_INFECT} -gt 0 ];then # 发现感染时发送告警 echo "ClamAV扫描结束,共发现${TOTAL_INFECT}个感染文件,请尽快登录服务器查看日志${SCAN_LOG_PATH}处理" | mail -s "【高危告警】ClamAV发现感染文件" ${ALERT_EMAIL} else # 无感染时如果不需要发通知,直接注释掉下面3行即可 echo "ClamAV扫描结束,未发现感染文件" | mail -s "【常规通知】ClamAV扫描完成无异常" ${ALERT_EMAIL} fi
备选grep+cut实现方案
如果你更习惯用grep和cut组合,也可以用以下命令实现相同效果:
grep '^Infected files:' scan.log | cut -d ' ' -f 3 | paste -sd+ | bc
内容的提问来源于stack exchange,提问作者KneadToKnow
相关产品推荐
相关产品推荐

