Когда я grep мой рабочий каталог рабочей копии Subversion, результаты включают в себя большое количество файлов из каталогов .svn. Можно ли рекурсивно grep каталоги, но исключить все результаты из .svn-каталогов?Исключить каталоги .svn из grep
ответ
Если у вас есть GNU Grep, он должен работать так:
grep --exclude-dir=".svn"
Если случится быть на системе Unix без GNU Grep, попробуйте следующее:
grep -R "whatever you like" *|grep -v "\.svn/*"
В версии Windows GNU Grep мне пришлось использовать '--exclude-dir = \. Svn' –
Только для gnu grep version> = 2.5.1a – osgx
ha. Я был почти готов, но у меня уже было. кажется, я был здесь раньше :) –
Если вы используете ack («лучше grep»), он будет обрабатывать это автоматически (и делать много других умных вещей тоже!). Это стоит проверить.
+1 для ack , У меня есть псевдоним оболочки и использовать его по умолчанию. –
Действительно приятно, что ак. Осторожно, что в Ubuntu и Linux Mint пакет «ack» не имеет ничего общего с «ack - better grep», который находится в пакете «ack-grep». –
Это, к сожалению, не решило проблему с * all * hidden dirs * (например, я не хочу, чтобы он спустился в '.stack-work' dir) *, также мне не очень понравилось, что его вывод занимает больше места имеющих имена файлов на отдельной строке. Поэтому в итоге я получаю псевдоним grep 'alias grepexclhid =" grep --exclude-dir = \ ". * \" "'. –
Я думаю - -exclude вариант рекурсии - это то, что вы ищете.
'--exclude' соответствует только шаблонам файлов, например' * .java' – rymo
grep --exclude-dir=".svn"
работает, потому что имя «.svn» является довольно уникальным. Но это может потерпеть неудачу по более обобщенному имени.
grep --exclude-dir="work"
не пуленепробиваемый, если у вас есть «/ дом/пользователь/работа» и «/ Главная/пользователь/вещи/работа» он пропустит оба. Невозможно определить «/ */work/*» , чтобы ограничить исключение только прежним именем папки. Насколько я мог поэкспериментировать, в GNU grep простой -exclude не будет исключать каталоги.
Два отбирает будет делать трюк:
- Первый Grep получит все.
Второй grep будет использовать выход первого grep как вход (через трубопровод). Используя флаг -v, grep выберет строки, которые НЕ соответствуют условиям поиска. Вуаля. Вы остаетесь со всеми выводами из первого grep, которые не содержат .svn в пути к файлу.
-v, -invert-match Инвертировать чувство соответствия, чтобы выбрать не соответствующие линии.
grep the_text_you_want_to_search_for * | grep -v .svn
Второй grep удаляет все форматирование цвета. – Chandranshu
Другая проблема заключается в том, что она удалит любые строки, которые имеют «.svn» в них, независимо от того, является ли .svn из-за имени файла или фактически находится в файле. Другая проблема заключается в том, что вы тратите время на поиск файлов в каталоге .svn, которые, как вы знаете, собираетесь исключить. Лучше - с самого начала. –
Это также будет тратить время на поиск совпадений в .svn только для их фильтрации после факта. – spaaarky21
psychoschlumpf правильно, но это работает только если у вас есть последняя версия grep
. Более ранние версии не имеют опции --exclude-dir
. Однако, если у вас очень большая база кода, double-grep
-ing может занять все время. Оставьте это в вашем .bashrc
для портативного .svn
-Меньше Grep:
alias sgrep='find . -path "*/.svn" -prune -o -print0 | xargs -0 grep'
Теперь вы можете сделать это:
sgrep some_var
... и получить ожидаемые результаты.
Конечно, если вы душевнобольной человек, как я, кто только имеет использовать тот же .bashrc
везде, вы могли бы потратить 4 часа написания усложненной функции Баш поставить там вместо этого.Или, вы могли бы просто подождать сумасшедший человек, как я, чтобы разместить его на сайте:
Метод, указанный выше с помощью find и xargs, не работает, по крайней мере, на RHEL5 в моей среде. Я все еще получаю списки .svn-base. – coderintherye
для меня это тоже не работает –
Для Grep> = 2.5.1a
Вы можете поместить это в среду (например, .bashrc
)
export GREP_OPTIONS='--exclude-dir=".svn"'
PS: благодаря Adrinan, есть дополнительные кавычки в моей версии:
export GREP_OPTIONS='--exclude-dir=.svn'
Вам не нужно иметь двойную кавычку - это не работало для меня, когда присутствует двойная кавычка –
Я попытался двойной grep'in на моей огромной базе коды, и он взял навсегда, так что я получил это решение с помощью моей напарницы
Обрезка гораздо быстрее, так как он останавливает найти от обработки этих каталогов по сравнению с «Grep -v», которая обрабатывает все и только исключает отображающие результаты
find . -name .svn -prune -o -type f -print0 | xargs -0 egrep 'YOUR STRING'
Вы можете также псевдоним этой команды в вашем .bashrc как
alias sgrep='find . -name .svn build -prune -o -type f -print0 | xargs -0 egrep '
Теперь Симпл у использовать
sgrep 'whatever'
Для Grep версии 2.5.1 вы можете добавить несколько --exclude
элементов, чтобы отфильтровать .svn
файлы.
$ grep -V | grep grep
grep (GNU grep) 2.5.1
GREP_OPTIONS="--exclude=*.svn-base --exclude=entries --exclude=all-wcprops" grep -l -R whatever ./
Другим вариант, хотя тот, который не может быть воспринят как приемлемого ответа является клонировать репозиторий в Git и использовать git grep
.
Редко, я сталкиваюсь с репозиториями svn, которые являются настолько массивными, это просто непрактично клонировать через git-svn
. В этих редких случаях я использую двойное решение grep, svngrep, но, как показывает множество ответов, это может быть медленным в больших репозиториях и исключать случаи «.svn», которые не являются каталогами. Я бы сказал, что это было бы крайне редко, хотя ...
Также в отношении медленной работы нескольких greps, как только вы использовали что-то вроде git, почти все кажется медленным в svn!
Последняя вещь .., моя вариация svngrep проходит через раскраску, остерегайтесь, реализация уродлива! Примерно grep -rn "$what" $where | egrep -v "$ignore" | grep --color "$what"
На моем GNU grep 2.5, --exclude-dirs
не является допустимым вариантом. В качестве альтернативы, это работает хорошо для меня:
grep --exclude="*.svn-base"
Это должно быть лучшим решением, чем исключая все строки, которые содержат .svn/
, так как это не случайно отфильтровать такие строки в реальном файле.
- 1. Исключить каталоги из вывода командной строки
- 2. Как исключить определенные каталоги/файлы из git grep search
- 3. Eclipse Subversion: Исключить каталоги
- 4. Как исключить каталоги .svn из поиска в Eclipse?
- 5. Исключить .svn-каталог из bitbake
- 6. Как исключить каталоги?
- 7. Исключить каталоги из поиска файлов
- 8. Невозможно исключить каталоги из PHPDocumentor
- 9. исключить каталоги из control mercurial
- 10. Grep только новейшие каталоги
- 11. Как экспортировать запущенные JAR с Eclipse и исключить каталоги .svn?
- 12. Исключить файл из commit SERVERSIDE SVN
- 13. Исключить шаблон из результата grep
- 14. Perl DirCompare исключить каталоги
- 15. список всех файлов рекурсивно, но исключить некоторые каталоги (.git .svn)
- 16. Исключить каталоги jshint
- 17. MonoDevelop Исключить папку из SVN
- 18. Переместить каталоги Исключить файл
- 19. 7zip: Исключить скрытые каталоги
- 20. sed, чтобы исключить каталоги
- 21. Как исключить каталоги/файлы из комплекта Meteor's
- 22. исключить некоторые определенные каталоги из категории
- 23. Исключить каталоги из списка файлов в ArrayList?
- 24. csslint: как исключить каталоги из командной строки?
- 25. Исключить каталоги из разворачивания фасонных блоков
- 26. Как исключить пакеты/каталоги из py.test?
- 27. Svn копирует каталоги
- 28. Как спрятать .SVN-каталоги из PHP
- 29. Исключить некоторые каталоги в Python3
- 30. Исключая каталоги .svn с WinRar
Связанный [Как я могу исключить каталоги из grep -R?] (Http://stackoverflow.com/questions/6565471/how-can-i-exclude-directories-from-grep-r) –