我有一个Debian虚拟专用服务器,该服务器托管多个虚拟域和用户。配置它的目的是为了托管多个域,并在每个域名下具有多个电子邮件地址(用户或帐户)。
我确实经常使垃圾邮件安静下来,并且没有时间去看SpamAssasin
,如何根据电子邮件正文中的匹配字符串来过滤某些电子邮件。
相反,以下功能已添加到.bash_aliases
中,并且已为其别名以供快速访问使用
my_new_del() {
echo "0: $1"
for d in /home/vmail/*/ ; do
# echo "1: $d"
for f in "$d"info/*/*.some.file.pattern*;do
grep -i -H -l -s "$1" "$f" | while read -r line ; do
echo "rm -rf $line"
rm -rf $line
done
# echo "2: $f"
done
done
}
alias my_del=my_new_del
然后我使用上面的别名:
my_del 'some string' &
脚本可以完成任务,但是它确实很慢,而且效率很低。它循环遍历vmail目录中的每个子目录(每个子目录代表一个域名)。然后,它循环遍历每个子目录中的文件,然后搜寻该字符串-如果匹配则将其删除。
这可以更有效地完成吗?
答案 0 :(得分:3)
您没有提供任何示例输入/输出,因此未经测试,但这听起来像是您要尝试的操作:
my_new_del() {
find /home/vmail -type f -name '*.some.file.pattern*' -exec grep -i -H -l -s "$1" {} + |
xargs rm -f {}
}
我假设您的文件名不包含任何空格,因为您现有的脚本依赖于此假设。