Saya menggunakan grep rekursif banyak untuk menemukan file sumber dengan konten tertentu.
grep -Rni "myfunc" .
Pada basis kode yang besar, ini bisa lambat, jadi saya menggunakan --incldue untuk membatasi ekstensi / daftar putih.
grep -Rni --include=*.java "myfunc" .
Namun, akan lebih efisien untuk mengecualikan (memangkas) seluruh subdirektori, saya pikir:
grep -Rni --exclude=/.svn/ "myfunc" .
Tetapi --exclude hanya mendukung pola file seperti * .java di atas. Bagaimana saya bisa mengecualikan direktori?
linux
command-line
grep
gabor
sumber
sumber
Sumber: https://stackoverflow.com/questions/2799246/grep-excluding-a-specific-folder-using
sumber
./dev
akan dikecualikan SEPANJANG DENGAN./foo/bar/dev
. Gunakan--exclude-dir=./dev
hanya berlaku untuk kasus pertama.bash grep -r --exclude-dir={dev,sys,proc} PATTERN data
Satu-satunya masalah dengan globbing adalah saya tidak bisa membuatnya bekerja di bash saya. Dalam hal ini saya harus memisahkan mereka.{}
satu entri, Anda mungkin perlu koma unary untuk menjadikannya array (tidak yakin bagaimana Bash mengatasinya). Alih-alih melakukan itu, saya malah membuat alias di .bash_aliases saya yang melingkupi daftar folder yang biasanya ingin saya kecualikan, misalnya .git, .svn, .hg, .cache, dan kemudian saya tambahkan melalui loop dengan--exclude-dir $dir
dan kemudian rentangkan array itu ke alias grep.Anda dapat menggunakan find sebagai gantinya:
OK, jadi itu sedikit mundur, Anda mendapatkan hasil grep pertama dan kemudian jalan. Mungkin orang lain punya jawaban yang lebih baik?
sumber
Berikut ini adalah contoh lengkap dari skrip di salah satu proyek saya yang mungkin bisa membantu, saya menyebut file ini "all_source" (ditandai sebagai executable) dan memasukkannya ke dalam direktori root proyek saya kemudian memanggilnya seperti
grep myfunc $(./all_source)
jenis di akhir skrip yang benar-benar pilihan.Script ini mengembalikan semua nama file dalam proyek yang cocok
*.h, *.cpp, *.c, *.lua, *.*awk
, tetapi tidak mencari di semua folder bernama .svn dan folder gen serta melewatkan folder untuk./lib
dan./vc6
(tetapi hanya yang langsung dari root proyek). Jadi, ketika Anda melakukannyagrep myfunc $(./all_source)
hanya greps dalam file-file itu. Anda harus memanggil ini dari root dir proyek juga.sumber
Ada juga opsi -proune untuk menemukan:
sumber
Anda dapat mencoba melakukan ini:
Misalnya: Jika Anda tidak ingin mencari konten dalam file log lakukan saja hal berikut:
sumber