Kecualikan subdirektori tersembunyi dari grep -r

22

Saya memiliki salinan lokal svn, saya ingin melakukan pencarian pada string some_string.

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

Tetapi jika melangkah lebih jauh, tampaknya direktori tersembunyi level pertama tidak termasuk:

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

Bagaimana saya bisa menghapus direktori svn tersembunyi dari output saya, dan tidak hanya dari level kedalaman pertama?

$ grep some_string * -r --which_option_here?
lang/en:some_string=Some string
MUY Belgia
sumber
Bukan jawaban langsung, tetapi Anda mungkin ingin mencoba ack .
depquid

Jawaban:

21

Gunakan --exclude-diropsi, misalnya:

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

Dari man grep:

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

Namun perlu dicatat, --exclude-diropsi itu hanya tersedia di GNU grep. Jika Anda greptidak mendukungnya, Anda mungkin perlu menggunakan alat lain seperti temukan misalnya :

find . \( -name .svn -prune \) -o -name "*" -exec grep -H "some_string" {} 2>/dev/null \;
jimmij
sumber
Saya harus memiliki Linux yang terlalu lama ...
MUY Belgium
Saya telah mengedit jawabannya, coba findversi jika grep Anda tidak mendukung --exclude-dir.
jimmij
Saya memiliki versi grep versi 2.5.1, dan tidak ada argumen --exclude-dir, dan saya telah mencoba semua yang saya pikirkan ...
MUY Belgium
1
Solusi kedua tidak digunakan --exclude-dir, sudahkah Anda mencobanya?
jimmij
Saya memiliki "opsi tidak terekonsiliasi"
MUY Belgium
1

Saya biasanya menggunakan ini:

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

${e%\./}akan menghapus yang pertama ./dan kemudian grepmenghapus semua yang dimulai dengan titik.

Manuel
sumber
Kode mengatakan e#, teks mengatakane%
Stephen Rauch