Я часто использую рекурсивный grep для поиска исходных файлов с конкретным контентом.
grep -Rni "myfunc" .
На больших кодовых базах это может быть медленным, поэтому я использую --incldue для ограничения расширений / белых списков.
grep -Rni --include=*.java "myfunc" .
Тем не менее, было бы более эффективно исключить (удалить) целые подкаталоги, я думаю:
grep -Rni --exclude=/.svn/ "myfunc" .
Но --exclude поддерживает только шаблоны файлов, такие как * .java выше. Как я могу исключить каталоги?
linux
command-line
grep
Габор
источник
источник
Источник: https://stackoverflow.com/questions/2799246/grep-exclusive-a-specific-folder-using
источник
./dev
будут исключены ПОСЛЕ./foo/bar/dev
. Используйте--exclude-dir=./dev
только для первого случая.bash grep -r --exclude-dir={dev,sys,proc} PATTERN data
единственная проблема с globbing - это то, что я не могу заставить его работать в моем bash. В этом случае я должен держать их отдельно.{}
одну запись, вам, вероятно, понадобится унарная запятая, чтобы сделать ее массивом (не уверен, как Bash справится с этим). Вместо этого я создал псевдоним в своем .bash_aliases, который зацикливает список папок, которые я обычно всегда хочу исключить, например .git, .svn, .hg, .cache, и затем я добавляю их через цикл с--exclude-dir $dir
а затем разверните этот массив в псевдоним grep.вы можете использовать вместо поиска:
Итак, это немного задом наперед, сначала вы получите результаты grep, а затем путь. Может быть, у кого-то еще есть лучший ответ?
источник
Вот полный пример скрипта в одном из моих проектов, который может помочь, я называю этот файл «all_source» (помеченный как исполняемый файл) и помещаю его в корневой каталог моего проекта, затем называю его
grep myfunc $(./all_source)
сортировкой в конце скрипта полностью по желанию.Этот скрипт возвращает все имена файлов в проекте, которые совпадают
*.h, *.cpp, *.c, *.lua, *.*awk
, но не выполняет поиск во всех папках с именами .svn и gen, а также пропускает папки./lib
и./vc6
(но только те, которые находятся прямо в корне проекта). Поэтому, когда вы делаетеgrep myfunc $(./all_source)
это только greps в этих файлах. Вам также нужно будет вызвать это из корневого каталога проекта.источник
Существует также опция -prune, чтобы найти:
источник
Вы можете попробовать сделать это:
Например: если вы не хотите искать содержимое в файлах журналов, просто сделайте следующее:
источник