编写将多个 "Infected files" 输出加在一起的 clamscan 摘要脚本

Scripting a clamscan summary that adds multiple "Infected files" outputs together

我想要一种简单的方法来添加从文本文件中获取的 2 个数字。详情如下:

每天,我 运行 对我的 /home/ 文件夹进行 clamscan,它会生成一个简单的日志,大致如下:

Scanning 851M in /home/.

----------- SCAN SUMMARY -----------
Infected files: 0
Time: 0.000 sec (0 m 0 s)
Start Date: 2021:11:27 06:25:02
End Date:   2021:11:27 06:25:02

我每周都会扫描我的 /home/ 文件夹和一个外部驱动器,所以我在日志中得到的信息是原来的两倍:

Scanning 851M in /home/.

----------- SCAN SUMMARY -----------
Infected files: 0
Time: 0.000 sec (0 m 0 s)
Start Date: 2021:11:28 06:25:02
End Date:   2021:11:28 06:25:02

Scanning 2.8T in /mnt/ext/.

----------- SCAN SUMMARY -----------
Infected files: 0
Time: 0.005 sec (0 m 0 s)
Start Date: 2021:11:28 06:26:30
End Date:   2021:11:28 06:26:30

我不会通过电子邮件将日志发送给自己,我只是有一个 bash 脚本发送一封电子邮件(用于每日扫描)读取“受感染的文件:”之后的数字并说“未找到受感染的文件”或“已找到受感染的文件,请检查日志。” (而且,老实说,一旦我 100% 确信一切都按照我想要的方式工作,我就会跳过“未找到受感染的文件”电子邮件。)问题是,我不知道如何使其适用于每周扫描多个文件夹,因为我得到的摘要没有合并这些数字。

我希望脚本找到以“受感染的文件:”开头的两行,获取后面的数字,然后添加它们。我想理想的解决方案是使用循环,以防我需要扫描两个以上的文件夹。我已经用 grep 和 cut 尝试了几次,但我只是没有足够的编码经验来完成所有工作。

谢谢!

此 bash 脚本将打印出受感染文件的总数:

#!/bin/bash

n=$(sed -n 's/^Infected files://p' logfile)
echo $((${n//$'\n'/+}))

或一行:

echo $(( $(sed -n 's/^Infected files: \(.*\)/+/p' logfile) ))