Saya ingin grep semua file kecuali beberapa tipe file?

36

Bagaimana cara grepfile secara rekursif dalam folder yang diberikan kecuali beberapa jenis file?

Sebagai contoh, saya mencari string dalam folder ruang kerja saya tetapi akhirnya mencari di dalam file sql dan menghasilkan string serial.

Jadi dalam hal ini, saya ingin ke grepfolder ruang kerja kecuali file sql.

Saya lebih suka mencari satu-liner jika memungkinkan.

chrisjlee
sumber
5
Ketahuilah bahwa Linux dan Unix dan unix-a-likes tidak benar-benar memiliki "tipe file" seperti yang Anda inginkan. Hanya berdasarkan kebiasaan bahwa nama file memiliki akhiran ".c" atau ".txt" atau ".sql" - sufiks itu bahkan bukan "ekstensi" gaya-Windows, apalagi indikator yang ditayangkan langsung oleh SQL atau teks atau kode sumber C di dalam file.
Bruce Ediger

Jawaban:

46

Jika Anda memiliki GNU, grepAnda dapat menggunakan --exclude=GLOBopsi, seperti

grep -r --exclude='*.sql' pattern dir/
jw013
sumber
1
Bagaimana cara mengecualikan satu file?
Nayeem
8

Ini akan melakukannya untuk Anda dan mengecualikan file .sql dan .txt:

find /some/dir -type f ! -name '*\.sql' ! -name '*.txt' -print0 | xargs -0 grep 'foobar'

Namun sepertinya ACK akan menjadi alat yang jauh lebih baik untuk apa yang Anda coba lakukan:

ack -a --nosql 'foobar' /some/dir
Mark McKinstry
sumber
Maaf, saya tidak melihat bagian 'ack' dan memasukkannya ke dalam jawaban saya, yang sekarang dihapus.
Peluang
Catatan pengguna lain yang ack - a --nobinarymencakup file biner
Michael Mrozek
Garis miring terbalik dalam pola nama file tidak diperlukan.
Kusalananda