Я попытался рекурсивно искать шаблон во всех файлах .c следующим образом
> grep -lr search-pattern *.c
Но получил это в качестве выхода
> grep: *.c: No such file or directory
Когда я использую это:
> grep -lr search-pattern *
Я получаю много. c файлами в каталогах с шаблоном.
Что не так с более ранним выражением?
--include=GLOB
вариант. В сочетании с рекурсивной опцией это очень мощно и не требуетfind
. Ницца!.
конец команды.*.c
Модель оценивается вашей оболочкой. Это относится к текущему каталогу, так же, как вы используетеls *.c
.Я думаю, что вместо этого вы хотите найти все файлы, соответствующие
*.c
шаблону (рекурсивно), иgrep
найти вас в нем. Вот способ сделать это:Используется
xargs
для добавления результатов поиска поfind
.В качестве альтернативы используйте
-exec
опцию для поиска, например:Кроме того, я не уверен, если вы действительно хотите
-l
вариантgrep
. Это остановится на первом матче:источник
find/xargs
синтаксических изломы на именах файлов , содержащих пробелы.-L
Вариантgrep
остановки на первом матче каждого файла и продолжить следующий файл: если один только хочет , чтобы увидеть , если шаблон содержится по крайней мере один раз в каждый данный файл, это быстрее.-print0
опции иxargs --null
.Я знаю, что это довольно старая тема, но так как у меня был тот же вопрос, я хочу поделиться своим предпочтительным способом достижения того же самого, в гораздо более короткой форме.
источник