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