Как я могу предотвратить поиск из папок .git? - PullRequest
7 голосов
/ 13 мая 2010

У меня есть команда find, которую я запускаю, чтобы найти файлы, имена которых содержат foo.

Я хочу пропустить каталог .git. Команда ниже работает кроме она печатает раздражает .git каждый раз, когда пропускает каталог .git:

find . ( -name .git ) -prune -o -name '*foo*'

Как я могу предотвратить пропущенные каталоги .git от печать на стандартный вывод?

Ответы [ 3 ]

8 голосов
/ 14 мая 2012

Так что просто для лучшей видимости:

find -name '.git*' -prune -o -name '*foo*' -print

Здесь также отсутствуют файлы .gitignore; обратите внимание на конечную -print , чтобы пропустить печать, -prune перестает спускаться в нее, но, тем не менее, -print печатает ее. Витая C;

3 голосов
/ 10 января 2017
find . -not -wholename "./.git*" -name "*foo*"

или, точнее, если вы не хотите видеть .git /, но действительно хотите искать в других каталогах, имя которых также начинается с .git (.git-foo/bar/...)

find . -not -wholename "./.git" -not -wholename "./.git/*" -name "*foo*"

Немного страннее, но более эффективно, потому что это сокращает все .git dir:

find . -not \( -wholename "./.git" -prune \) -name "*foo*"
1 голос
/ 13 мая 2010

Попробуйте это:

find . -name '*foo*' | grep -v '\.git'

Это все равно будет проходить в каталогах .git, но не будет отображать их. Или вы можете комбинировать с вашей версией:

find . ( -name .git ) -prune -o -name '*foo*' | grep -v '\.git'

Вы также можете сделать это без grep:

find . ( -name .git ) -prune -printf '' -o -name '*foo*' -print
...