grep с ограниченной рекурсией, когда существует файл перенаправления

Я хотел бы найти слово во всех файлах в каталоге рекурсивно, и вывести строки вхождения в выходной файл в каталоге.

grep -ri "my_str" ./ >> opt_file.txt

Однако, поскольку "my_str" также появляется в opt_file.txt, вхождение в opt_file.txt также рекурсивно перечисляется в перенаправленном файле и, следовательно, образует бесконечный цикл. Есть ли простой способ решить эту проблему?

1 ответ

Решение

От man grep:

--exclude=GLOB
      Skip  files  whose  base  name  matches  GLOB  (using   wildcard
      matching).   A  file-name  glob  can  use  *,  ?,  and [...]  as
      wildcards, and \ to quote  a  wildcard  or  backslash  character
      literally.

Следовательно:

grep -ri "my_str" ./ >> opt_file.txt --exclude=opt_file.txt

Хотя я бы просто сохранил файл в другом месте, чтобы избежать осложнений, когда подобный файл также существует в подкаталоге:

grep -ri "my_str" ./ >> ../opt_file.txt
grep -ri "my_str" ./ >> /tmp/opt_file.txt
Другие вопросы по тегам