Делают man grep
на вашей системе, и посмотреть, какую версию вы имеете. Возможно, ваша версия grep не сможет использовать --exclude-dirs
.
Вы действительно лучше использовать find
, чтобы найти нужные файлы, а затем использовать grep
разобрать их:
$ find . -name '.git' -type d -prune \
-o -name "*.min.*" -prune \
-o -type f -exec grep --color -n -H {} "$pattern" \;
Я не поклонник рекурсивной grep
. Его синтаксис стал раздутым, и это действительно не нужно. Благодарю вас, у нас есть отличный инструмент для поиска файлов, соответствующих определенным критериям.
В программе find
-o
выделяют различные статьи. Если файл не был отфильтрован предыдущим предложением -prune
, он передается следующему. После того, как вы обрезали все каталоги .git
и все файлы *.min.*
, вы передаете результаты в предложение -exec
, которое выполняет команду grep в этом файле.
Некоторые люди предпочитают это так:
$ find . -name '.git' -type d -prune \
-o -name "*.min.*" -prune \
-o -type f -print0 | xargs -0 grep --color -n -H "$pattern"
The -print0
выводит все из найденных файлов, разделенных символом NULL. xargs -0
будет читать в этом списке файлов и передавать их команде grep
. -0
сообщает xargs
, что имена файлов NULL разделены, а не разделены пробелами. Некоторый xargs
примет --null
вместо параметра -0
.
'-exclude-dir' опция доступна только в последних версиях GNU grep (> = 2.5.2) - [ссылка] (http://stackoverflow.com/a/8692318/ 526471). Вы можете найти [этот ответ] (http://stackoverflow.com/a/6565519/526471) полезным – jkshah
хм, действительно. У меня 2.15. Теперь, почему информация для --exclude-dir включена в справочную страницу вне меня. Трикси. –
Не используется '--exclude-dir' в сочетании с' -r' (рекурсивным)? – damienfrancois