SOLUSI 1 (gabungkan find
dan grep
)
Tujuan dari solusi ini bukan untuk menangani grep
kinerja tetapi untuk menampilkan solusi portabel :juga harus bekerja dengan busybox atau versi GNU yang lebih lama dari 2.5.
Gunakan find
, untuk mengecualikan direktori foo dan bar :
find /dir \( -name foo -prune \) -o \( -name bar -prune \) -o -name "*.sh" -print
Kemudian gabungkan find
dan penggunaan grep
non-rekursif , sebagai solusi portabel :
find /dir \( -name node_modules -prune \) -o -name "*.sh" -exec grep --color -Hn "your text to find" {} 2>/dev/null \;
SOLUSI 2 (menggunakan --exclude-dir
pilihan grep
):
Anda sudah mengetahui solusi ini, tetapi saya menambahkannya karena ini adalah solusi terbaru dan efisien. Perhatikan bahwa ini adalah solusi yang kurang portabel tetapi lebih mudah dibaca manusia.
grep -R --exclude-dir=node_modules 'some pattern' /path/to/search
Untuk mengecualikan banyak direktori, gunakan --exclude-dir
sebagai:
--exclude-dir={node_modules,dir1,dir2,dir3}
SOLUSI 3 (Ag)
Jika Anda sering mencari kode, Ag (The Silver Searcher) adalah alternatif yang jauh lebih cepat untuk grep, yang disesuaikan untuk mencari kode. Misalnya, secara otomatis mengabaikan file dan direktori yang terdaftar di .gitignore
, jadi Anda tidak harus meneruskan opsi pengecualian rumit yang sama ke grep
atau find
.
Versi terbaru GNU Grep (>=2.5.2) sediakan:
--exclude-dir=dir
yang mengecualikan direktori yang cocok dengan pola dir
dari pencarian direktori rekursif.
Jadi, Anda dapat melakukan:
grep -R --exclude-dir=node_modules 'some pattern' /path/to/search
Untuk informasi lebih lanjut tentang sintaks dan penggunaan, lihat
- Halaman manual GNU untuk Pemilihan File dan Direktori
- Jawaban StackOverflow terkait Gunakan grep --exclude/--include sintaks untuk tidak grep melalui file tertentu
Untuk GNU Greps dan POSIX Grep yang lebih lama , gunakan find
seperti yang disarankan dalam jawaban lain.
Atau cukup gunakan ack
(Edit :atau Pencari Perak ) dan selesaikan!