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

Most efficient way to grep files in directories for deletion using bash/aliases

我有一个托管多个虚拟域和用户的 Debian 虚拟专用服务器。它的配置是为了托管多个域并在每个域名下有多个电子邮件地址(用户或帐户)。

我确实经常收到垃圾邮件,没有时间查看 SpamAssasin 如何根据电子邮件正文中的匹配字符串过滤某些电子邮件。

而是将以下函数添加到 .bash_aliases 中,并为快速访问使用别名

my_new_del() {
  echo "0:  "
  for d in /home/vmail/*/ ; do
      # echo "1:  $d"
      for f in "$d"info/*/*.some.file.pattern*;do
          grep -i -H -l -s "" "$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目录中的每个子目录(每个子目录代表一个域名)。然后它循环遍历每个子目录中的文件,然后 greps 查找字符串 - 如果匹配则删除它。

能否以更有效的方式完成此操作?

您没有提供任何示例 input/output,因此这未经测试,但听起来您正在尝试这样做:

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

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