Bash.Поиск определенного текста в файлах с использованием find, cat и grep - PullRequest
0 голосов
/ 24 мая 2019

У меня есть тысячи папок, заполненных старым мусором, которые мне нужны. А именно мне нужно найти все файлы, содержащие определенный текст в файлах, используя маску. Но если я сделаю это, используя grep -R "mask" , то это приведет к сбивке всего этого мусора, и в результате машина зависнет. Я хочу передать результаты поиска и кошки в grep, но не могу найти правильный путь.

a=$(find ./ -name "*.txt")
for i in $a; do
  cat $i | grep "string" >> result.txt
done

Нечто подобное, но, похоже, не работает. Где я тупой?

1 Ответ

1 голос
/ 24 мая 2019

Вам не нужно cat.
grep "string" $i быстрее.

Вам тоже не нужно find.

Вам нужна команда:

grep -r -l "string" --include="*.txt" .

Он работает быстрее, чем любая комбинация find и grep, потому что он запускает только один процесс.

Аргументы:

  • -r указывает grep рекурсивно обрабатывать входной каталог (.).
  • -l говорит ему подавить нормальный вывод и выводить только имя соответствующих файлов. Он работает быстрее, потому что останавливается на первом совпадении в каждом файле.
  • "string" - текст, который вы ищете.
  • --include="*.txt" ограничивает поиск файлами, имена которых соответствуют шаблону. Кавычки вокруг *.txt" необходимы; без них оболочка расширяет *.txt до списка подходящих файлов в текущем каталоге.
  • . - каталог для поиска файлов; текущий каталог в этом примере.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...