2010-05-13 3 views
5

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

Я хочу пропустить каталог .git. Приведенная ниже команда работает кроме он печатает раздражает .git любое время он пропускает .git каталога:

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

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

+1

синтаксис '(-name .git)' не имеет смысла – msw

+0

Право - Я думаю, что это должно быть \\ (-name .git \\) , верный? –

ответ

1

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

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 
+0

Хорошо - я обнаружил, что мне не нужно класть -printf '' - мне нужно только поставить -print на задней панели команды! Например, это работает: найти. \ (-name .git \) -prune -o -name '* foo *' -print Спасибо! –

+0

Использование grep после поиска - плохой трюк по многим причинам. Рассмотрите возможность использования встроенных параметров в поиске для фильтрации –

8

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

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

Это также не включает .gitignore файлы; обратите внимание на завершающий вывод -print, чтобы опустить печать, -переключительные остановки, спускающиеся в нее, но без -print отпечатывает его тем не менее. Twisted C;

+0

Вот как найти каталоги: найти. -name '.git \ *' -prune -o -name '\ * foo \ *' -maxdepth 4-type d -print – Lionel

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

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

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

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

find . -not \(-wholename "./.git" -prune \) -name "*foo*" 
Смежные вопросы