Примечание: это не дубликат. Я имею в виду определенный случай, когда параметры grep для исключения путей / каталогов не ведут себя ожидаемым образом.
Я пытаюсь использовать grep для рекурсивного поиска в моей корневой файловой системе. Я пытаюсь исключить определенные каталоги, такие как /proc
, /sys
и /usr/local
. Если я использую --exclude-dir=${DIR_NAME}
, то он не будет искать пути ниже ${DIR_NAME}
, но это также будет означать, что он откажется искать пути ниже ${DIR_NAME}
если ${DIR_NAME}
равен на уровне ниже текущего рабочего каталога. В качестве примера рассмотрим это дерево файловой системы:
${PWD}/
data/
settings/
sys/
users/
developer/
projects/
my_os/
build/
src/
apps/
sys/
Makefile
extras/
sys/
apps/
os/
Если я хочу, чтобы мой поиск исключал ${PWD}/sys
и все, что под ним, grep -rl --exclude-dir=sys
исключит его, но также исключит ${PWD}/data/settings/sys
и ${PWD}/users/developer/projects/my_os/src/sys
, две директории, которые я хочу включить в свой поиск.
Первоначально я надеялся, что --exclude-dir
/--exclude
будет разрешать регулярные выражения, и я нашел этот комментарий, указывающий, что они делают, но кажется, что синтаксис регулярных выражений не влияет на поведение утилиты (например, "^/(dev|proc)"
). Я в порядке, если эти два параметра не используют регулярные выражения, но я не хочу, чтобы шаблон исключения применялся к отдельным компонентам пути. Есть ли способ заставить его работать так?