2010-05-13 12 views
5

foo adlarını içeren dosyaları bulmak için çalıştırdığım bir find komutum var.Yazdırma .git klasörlerinden bulmayı nasıl önleyebilirim?

.git dizini atlamak istiyorum. Ben standart çıkışa baskıdan .git dizinleri atlanır önleyebilir nasıl

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

: Komut aşağıda bir can sıkıcı .git bir .git dizin atlar her zaman yazdırır hariç çalışır? Bu hala .git dizinlere üzerinden geçer

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

, ancak bunları görüntülemez:

+1

sözdizimi '(-adı .git)' – msw

+0

Sağ hiçbir mantıklı - Ben gerektiğini düşünüyorum \\ (-adı .git \\) , doğru mu? –

cevap

1

bu bir deneyin. grep olmadan da bunu yapabilir

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

: Ya da sürümü ile birleştirebilirsiniz

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

Tamam - Ben -printf '' koymak zorunda olmadığını buldum - '-Kaydı sadece komutun arkasına koymam gerekiyor! Örneğin, bu çalışır: bulmak. \ (-name .git \) -prune -o -name '* foo *' -print Teşekkürler! –

+0

Bulunduktan sonra grep kullanmak birçok nedenden dolayı kötü bir numaradır. Filtreleme bulmak için yerleşik seçenekleri kullanmayı düşünün –

8

Dolayısıyla, sadece daha iyi görünürlük için:

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

Bu aynı zamanda .gitignore dosyaları atlar; yazdırmayı iptal etmek için -print izini not edin, -köprünün içine inen durur, ancak baskı yapılmadan yazdırılır. Twisted C;

+0

İşte dizinleri bulmak için: bulmak. -name '.git \ *' -prune -o -name '\ * foo \ *' -maxdepth 4 -type d -print – Lionel

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

sen .git görmek/fakat ismi diğer dirs arama yapmak istiyorsun istemiyorsanız ya da daha sıkı, ayrıca .git ile başlar (.git-foo/bar/...)

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

Biraz bu bütün .git dir erik çünkü odder fakat daha verimli:

find . -not \(-wholename "./.git" -prune \) -name "*foo*" 
İlgili konular