我必须编写一个脚本,检查目录中的所有文件是否都包含特定字符串。如果是,则使用该文件名发送邮件。
让我更深入地解释一下。假设我有一个目录/demo/
,这个目录包含4个文件,命名为:
file1
file2
file3
file4
现在我要查找的字符串是"some text"
和"some text2"
,如果任何文件包含任何一个字符串,则应该发送邮件。假设file1
包含"some text"
,file3
包含"some text2"
,那么邮件应该像一样发送
Alert check file1
Alert check file2
两个文件的邮件不同。
现在我想我必须使用这个命令:
grep -rnw '/demo/' -e 'some text', 'some text2'
但我不知道如何检查我的状况,所以有什么方法可以做到这一点吗?
对于邮件,我使用sendmail
服务,但我更担心我的情况。
查找具有grep
的两个正则表达式的命令是grep -e 'some text' -e 'some text2'
。可能更习惯地使用grep -E
和单个正则表达式。将-n
替换为-l
以仅打印文件名。
grep -E 'some text|some text2' -lrw /demo/ |
while read -r filename; do
sendmail -oi -t <<____
Subject: Alert for $filename
To: you@example.net
Alert check $filename
____
done
只有当文件名中不包含换行符时,此操作才能正常工作。如果您需要处理完全任意的文件名,可以查看find -exec
。