Gizli alt dizinleri grep -r öğesinden hariç tut


22

Bir svn yerel kopyasına sahibim, bir dizgide bir arama yapmak istiyorum.

$ grep some_string * -r
lang/en:some_string=Some string
lang/.svn/en:some_string=Some string

Ancak biraz daha ileri giderse, ilk seviye gizli dizinlerin hariç tutulduğu görülüyor:

$ cd lang && grep some_string * -r
en:some_string=Some string

Gizli svn dizinlerini yalnızca ilk derinlik seviyesinden değil çıktımdan nasıl kaldırabilirim?

$ grep some_string * -r --which_option_here?
lang/en:some_string=Some string

Doğrudan bir cevap değil, ancak geri adım denemek isteyebilirsiniz .
14'te

Yanıtlar:


21

--exclude-dirSeçenek kullanın , örneğin:

grep -r --exclude-dir='.*' some_string

Kimden man grep:

--exclude-dir=DIR
              Exclude directories matching the pattern DIR from recursive searches.

Ancak, bu --exclude-dirseçeneğin yalnızca GNU grep'te kullanılabileceğini unutmayın. Sizin grepdesteklemiyorsa, örneğin bulmak için başka bir araç kullanmanız gerekebilir :

find . \( -name .svn -prune \) -o -name "*" -exec grep -H "some_string" {} 2>/dev/null \;

Çok eski bir Linux'a sahip olmalıyım ...
MUY Belçika

Cevabınızı finddüzelttim, grepiniz desteklemiyorsa sürümü deneyin --exclude-dir.
jimmij

Grep sürüm 2.5.1 sürümüne sahibim ve hiçbir --exclude-dir argümanı yok ve düşündüğüm her şeyi denedim ...
MUY Belgium

1
İkinci çözüm kullanmıyor --exclude-dir, denediniz mi?
jimmij

"Düzenlenmemiş seçenek" var
MUY Belgium

1

Normalde bunu kullanırım:

for e in $(find . -maxdepth 1 -type d); do echo ${e#\./}; done | grep -v '^\.'

${e%\./}ilkini kaldıracak ./ve sonra grepnokta ile başlayan her şeyi silecektir .


Kod diyor e#, metin diyore%
Stephen Rauch
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.