У нас довольно большая и сложная файловая система, и я пытаюсь создать список файлов, содержащих определенную текстовую строку. Это должно быть просто, но мне нужно исключить каталоги './svn' и './pdv' (и, возможно, другие) и просматривать только файлы типа *.p, *.w или .i< /эм>.
Я могу легко сделать это с помощью программы, но она работает очень медленно. Я хочу ускорить процесс (чтобы мне не приходилось многократно искать тысячи файлов), поскольку мне нужно запускать такие поиски по длинному списку критериев.
Обычно мы ищем файловую систему, используя:
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"
Исключает каталоги './svn', но не каталоги './pdv'. Не ограничивает просматриваемые файлы.
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.
--excluse "pdv"
(обратите внимание на опечатку s/d) в обоих случаях, и вы жалуетесь на то, что это конкретное условие не работает... просто проверка опечатки не является основной проблемой. - person geronime   schedule 19.08.2011grep -ilR "run" . --exclude ".svn" --exclude "pdv" --exclude "!.{p,w,i*}"
. К сожалению, поскольку набор результатов теперь включает как.svn/text-base/jr83144.p.svn-base
, так иpdv/cm/backupds.i
, я не думаю, что это сработало. Большое спасибо - person Colin   schedule 19.08.2011--exclude-dir
? Это на самом деле проблема, я думаю. См. руководствоgrep
. - person geronime   schedule 19.08.2011find . \( \( -name .svn -o -name pdv \) -type d -prune \) -o \( -name '*.[pwi]' -exec grep ... {} + \)
- person Adrian Pronk   schedule 19.08.2011--exclude-dir
, но он не зарегистрировался. Ни он, ни--exclude
в инструкции не указаны. - person Colin   schedule 19.08.2011--exclude
и--exclude-dir
— это расширенные опцииgrep
, реализованные в Linux. - person geronime   schedule 19.08.2011