Одна из моих любимых команд BASH:
find . -name '*.*' -exec grep 'SearchString' {} /dev/null \;
который ищет содержимое всех файлов в и ниже текущего каталога для указанной SearchString. Как разработчик, это пригодилось время от времени.
Однако из-за моего текущего проекта и структуры моей кодовой базы я хотел бы сделать эту команду BASH еще более сложной, не выполняя поиск файлов, которые находятся в каталоге или ниже каталога, содержащего «.svn», или любых файлов, которые конец ".html"
Страница MAN для поиска вроде как меня смутила. Я попытался использовать -prune, и это дало мне странное поведение. В попытке пропустить только HTML-страницы (для начала) я попытался:
find . -wholename './*.html' -prune -exec grep 'SearchString' {} /dev/null \;
и не получил поведение, на которое я надеялся. Я думаю, что я мог упустить смысл -прун. Не могли бы вы, ребята, помочь мне?
Спасибо
grep -rl 'SearchString'
find
для поиска внутри файла.
-name '*.*'
не находит все файлы: только те, которые имеют .
в своем имени ( *.*
обычно это использование DOS-изма, тогда как в Unix вы обычно используете только *
для этого). Чтобы действительно сопоставить их все, просто удалите аргумент find . -exec ...
. Или, если вы хотите применить grep только к файлам (и пропустить каталоги), тогда сделайте find . -type f -exec ...
.
find
это не встроенная команда bash, а отдельная программа