Подтвердить что ты не робот

Grep во всех каталогах

У меня есть каталог с именем XYZ, в котором есть каталоги ABC, DEF, GHI. Я хочу найти шаблон "writeText" во всех *.c во всех каталогах (например, XYZ, XYZ/ABC, XYZ/DEF и XYZ/GHI) Какую команду grep можно использовать?

Также, если я хочу искать только в XYZ, XYZ/ABC, XYZ/GHI, а не XYZ/DEF, какую команду grep можно использовать?

Спасибо!

4b9b3361

Ответ 1

grep -R --include="*.c" --exclude-dir={DEF} writeFile /path/to/XYZ
  • -R означает рекурсивный, поэтому он перейдет в подкаталоги каталога, который вы просматриваете через
  • --include="*.c" означает "искать файлы, заканчивающиеся на .c"
  • --exclude-dir={DEF} означает "исключить каталоги с именем DEF. Если вы хотите исключить несколько каталогов, сделайте следующее: --exclude-dir={DEF,GBA,XYZ}
  • writeFile - это шаблон, который вы используете для
  • /path/to/XYZ - это путь к каталогу, который вы хотите выполнить grep.

Обратите внимание, что эти флаги применимы к GNU grep, могут отличаться, если вы используете BSD/SysV/AIX grep. Если вы используете Linux/GNU grep utils, вы должны быть в порядке.

Ответ 2

Вы можете использовать следующую команду, чтобы ответить хотя бы на первую часть вашего вопроса.

find . -name *.c | xargs grep "writeText"

Ответ 3

Это сработало для меня. Я немного изменил свои потребности. Я использую Macintosh OSX 10.8.3 из приложения Terminal.

Вместо "*.c" я использовал "util" - это часть каждого имени файла, которое я хотел найти среди многих других файлов, которые были в каталоге.

В моей ситуации мне не нужен "-exclude-dir", потому что я искал все подкаталоги под моим текущим местоположением.

В writeFile я использовал (с кавычками) "usage =" или "request", который был двумя из строк, которые я хотел найти в файле (-ах).

Затем я использовал ".". чтобы указать, что я хотел начать поиск в текущем каталоге.

Затем я использую файл > /[path]/[filename.txt], чтобы указать, что я хотел, чтобы все выходные данные добавлены в текстовый файл.

Спасибо.