Если вы не против использования find
, мне нравится его -prune
функция:
find [directory] \
-name "pattern_to_exclude" -prune \
-o -name "another_pattern_to_exclude" -prune \
-o -name "pattern_to_INCLUDE" -print0 \
| xargs -0 -I FILENAME grep -IR "pattern" FILENAME
В первой строке вы указываете каталог, который хотите найти. .
(текущий каталог) является допустимым путем, например.
Во 2-й и 3-й строках используйте "*.png"
, "*.gif"
, "*.jpg"
и т. Д. Используйте столько конструкций -o -name "..." -prune
, сколько у вас есть шаблонов.
В 4-й строке вам нужен еще один -o
(он указывает "или" на find
), паттерны, которые вам НУЖНЫ, и вам нужно либо -print
, либо -print0
в конце. Если вы просто хотите, чтобы «все остальное» оставалось после удаления изображений *.gif
, *.png
и т. Д., Используйте
-o -print0
и вы закончили с 4-й строкой.
Наконец, на 5-й строке находится канал к xargs
, который берет каждый из этих полученных файлов и сохраняет их в переменной FILENAME
. Затем он передает grep
флаги -IR
, "pattern"
, а затем FILENAME
расширяется на xargs
, чтобы стать тем списком имен файлов, найденных find
.
По вашему конкретному вопросу утверждение может выглядеть примерно так:
find . \
-name "*.png" -prune \
-o -name "*.gif" -prune \
-o -name "*.svn" -prune \
-o -print0 | xargs -0 -I FILES grep -IR "foo=" FILES