代码之家  ›  专栏  ›  技术社区  ›  KingsInnerSoul

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

  •  1
  • KingsInnerSoul  · 技术社区  · 6 年前

    我有一个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目录中的每个子目录(每个子目录代表一个域名)。然后它循环遍历每个子目录中的文件,然后greps查找字符串-如果找到匹配的字符串,就会将其删除。

    1 回复  |  直到 6 年前
        1
  •  3
  •   Ed Morton    6 年前

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

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