Grep во всех каталогах
У меня есть каталог с именем XYZ, в котором есть каталоги ABC, DEF, GHI. Я хочу найти шаблон "writeText" во всех *.c во всех каталогах (например, XYZ, XYZ/ABC, XYZ/DEF и XYZ/GHI)
Какую команду grep можно использовать?
Также, если я хочу искать только в XYZ, XYZ/ABC, XYZ/GHI, а не XYZ/DEF, какую команду grep можно использовать?
Спасибо!
Ответы
Ответ 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], чтобы указать, что я хотел, чтобы все выходные данные добавлены в текстовый файл.
Спасибо.