Самый эффективный способ grep файлов в каталогах для удаления с использованием bash / aliases - PullRequest
0 голосов
/ 04 октября 2018

У меня есть виртуальный частный сервер 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 (каждый подкаталог представляет собой доменное имя).Затем он просматривает файлы в каждом подкаталоге, а затем ищет строку - и удаляет ее, если найдет совпадение.

Можно ли сделать это более эффективным способом?

1 Ответ

0 голосов
/ 05 октября 2018

Вы не предоставили ни одного примера ввода / вывода, так что это не проверено, но, похоже, именно это вы и пытаетесь сделать:

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

Я предполагаю, что ваши имена файлов этого не делаютсодержать пробелы, так как существующий скрипт основывается на этом предположении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...