У нас довольно большая и сложная файловая система, и я пытаюсь создать список файлов, содержащих определенную текстовую строку. Это должно быть просто, но мне нужно исключить каталоги './svn' и './pdv' (и, возможно, другие) и просматривать только файлы типа * .p, * .w или .i *. 1002 *.
Я легко могу сделать это с помощью программы, но она работает очень медленно. Я хочу ускорить процесс (чтобы я не выполнял поиск в тысячах файлов неоднократно), так как мне нужно выполнить такой поиск по длинному списку критериев.
Обычно мы ищем файловую систему, используя:
find . -name "*.[!r]*" -exec grep -i -l "search for me" {} \;
Это работает, но мне приходится использовать программу для исключения нежелательных каталогов, поэтому она работает очень медленно.
После просмотра тем здесь:
поток переполнения стека
Я решил попробовать несколько других подходов:
grep -ilR "search for me" . --exclude ".svn" --excluse "pdv" --exclude "!.{p,w,i*}"
Исключает каталоги ./svn, но не каталоги ./pdv. Не ограничивает количество просматриваемых файлов.
grep -ilR "search for me" . --exclude ".svn" --excluse "pdv" --include "*.p"
За исключением каталогов.
find . -name "*.[!r]*" -exec grep -i -l ".svn" | grep -i -l "search for me" {} \;
Я даже не могу заставить это (или варианты) успешно работать.
find . ! -name "*.svn*" -prune -print -exec grep -i -l "search for me" {} \;
ничего не возвращает. Похоже, что он останавливается, как только находит каталог .svn.