Bir dizeyi yalnızca alt dizinlerin içindeki belirli bir dosyada bulma


10

Diyelim ki GetTypes()tüm C # kaynak dosya ( .cs) dizinleri / alt dizinleri fonksiyon bulmak gerekir .

Kullandım grep -rn GetTypes *.csama bir hatayla karşılaştım grep: *.cs: No such file or directory. Kullanmak zorunda kaldım grep -rn GetTypes *, ancak bu durumda *.cssadece tüm dosyaları göstermiyor .

Dizeyi yalnızca .csdosyalarda bulmak için hangi komutu kullanmam gerekir ?


Yanıtlar:


12

Kabuk bash ≥4 ise, koyun shopt -s globstarGözlerinde farklı ~/.bashrc. Eğer kabuğun zsh ise, iyisin. Sonra koşabilirsin

grep -n GetTypes **/*.cs

**/*.cs*.csgeçerli dizinde veya alt dizinlerinde özyinelemeli olarak eşleşen tüm dosyalar anlamına gelir .

Destekleyen bir kabuk çalıştırmıyorsanız **ancak grep'iniz destekliyorsa --include, özyinelemeli bir grep yapabilir ve grepyalnızca belirli kalıplarla eşleşen dosyaları düşünmenizi söyleyebilirsiniz . Dosya adı kalıbı etrafındaki tırnaklara dikkat edin: kabuk tarafından değil, grep tarafından yorumlanır.

grep -rn --include='*.cs' GetTypes .

Yalnızca taşınabilir araçlarla (bazı sistemlerde hiç yoktur grep -r), finddizin geçiş kısmı ve grepmetin arama kısmı için kullanın.

find . -name '*.cs' -exec grep -n GetTypes {} +

Geçici sete globstarbir akım Bash 4+ kabuk seçeneği kullanın: shopt -s globstar.
tjanez

8

Parlak küçük grep / find yerine bilinen olarak kontrol etmelisiniz ack. Özellikle kaynak kodu dosyalarının dizinlerinde arama yapmak için ayarlanmıştır.

Komutunuz şöyle görünecektir:

ack --csharp GetTypes

4

GNU kullanıyorsanız grep, özyinelemeli dizin geçişine hangi dosyaların dahil edileceğini belirtebilirsiniz:

grep --include '*.cs' -rn GetTypes .

(burada son dönem, geçerli çalışma dizinini geçişin kökü olarak gösterir)


4

Bul ve grep kombinasyonu kullanıyorum:

find . -name "*.cs" | xargs grep "GetTypes" -bn --color=auto

İçin find, .bir dizine geçebilir ve -nameher dosyaya bakmak istiyorsanız kaldırabilirsiniz .

İçin grep, -bnkonum ve satır numarasını yazdıracak ve --coloraradığınızı vurgulayarak gözlerinize yardımcı olacaktır.

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.