使用 bash/alias 删除目录中的 grep 文件的最有效方法



我有一个 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 目录中的每个子目录(每个子目录代表一个域名(。然后它遍历每个子目录中的文件,然后 grep 查找字符串 - 如果匹配,则删除它。

这能以更有效的方式完成吗?

您没有提供任何示例输入/输出,因此这是未经测试的,但听起来这就是您要做的:

my_new_del() {
find /home/vmail -type f -name '*.some.file.pattern*' -exec grep -i -H -l -s "$1" {} + |
xargs rm -f {}
}

我假设您的文件名不包含任何空格,因为您现有的脚本依赖于该假设。

最新更新