Tüm .java dosyalarını geçerli dizindeki basit bir dize (regex değil) ve Mac OS X'deki tüm alt dizinleri nasıl arayabilirim? Sadece eşleşen dosya ve dizin adlarının bir listesini yazdırmak istiyorum.
Tüm .java dosyalarını geçerli dizindeki basit bir dize (regex değil) ve Mac OS X'deki tüm alt dizinleri nasıl arayabilirim? Sadece eşleşen dosya ve dizin adlarının bir listesini yazdırmak istiyorum.
Yanıtlar:
Ve her zaman popüler
find . -name '*.java' | xargs grep -l 'string'
EDIT (Frank Szczerba tarafından):
İçinde boşluk olan dosya adları veya dizinlerle uğraşıyorsanız, bunu yapmanın en güvenli yolu:
find . -name '*.java' -print0 | xargs -0 grep -l 'string'
Bunu yapmanın her zaman birden fazla yolu vardır.
mdfind
bunu yapmanın daha OSXy bir yoludur !
Geleneksel UNIX yanıtı bu soru için kabul edilen cevap olacaktır:
find . -name '*.java' | xargs grep -l 'string'
Bu muhtemelen Java dosyaları için çalışacaktır, ancak dosya adlarındaki boşluklar Mac'te geleneksel UNIX dünyasından çok daha yaygındır. Boşluklu dosya adları yukarıdaki kanaldan geçirildiğinde, xargs tek tek kelimeleri farklı adlar olarak yorumlar.
Gerçekten istediğiniz, sınırları kesinleştirmek için isimleri geçersiz kılmaktır:
find . -name '*.java' -print0 | xargs -0 grep -l 'string'
Alternatif, Mark'ın belirttiği gibi, sizin için çalışma grep'i bulmanıza izin vermektir, ancak çok sayıda dosya arıyorsanız bu yaklaşım daha yavaştır (grep, dosya listesinin tamamı ile bir kez değil, dosya başına bir kez çağrıldığı için).
Grep'ten daha iyi olan grep'i kullanın, ack :
ack -l --java "string"
Bu aslında isterseniz bir normal ifade kullanır, sadece meta karakterlerden uzak durun veya onlardan kaçın ve dizeleri arayabilirsiniz.
find . -iname "*.java" -exec egrep -il "search string" {} \;
grep -rl --include="*.java" simplestring *
Atlayın find
ve Spotlight
komut satırından kullanın . Çok daha güçlü!
COMMAND LINE SPOTLIGHT - BULMAK BÜYÜK BULUŞU
Çoğu kişi, komut satırından Spotlight aramaları yapabileceğinizi bilmez. Neden tüm gizli bulma ve grep seçeneklerini ve Spotlight'ın işi sizin için yapmasına izin verdiğinizde neyi hatırlayamıyorsunuz? Spot Işığı komut satırı arabirimine mdfind denir. GUI Spotlight aramasıyla aynı güce ve daha fazlasına sahiptir, çünkü komut satırında yazılabilir!
Bunu bir deneyin:
grep -rl "string" */*java
Seçeneklerin arabirimde olduğu yerde daha sezgisel bir arama yapmak için TextWrangler gibi bir GUI programı da kullanabilirsiniz .
grep "(your string)" -rl $(find ./ -name "*.java")
Büyük / küçük harf kullanımını yoksaymak istiyorsanız, -rl yerine -irl yazın. (dizeniz) gereksinimi görürseniz normal ifade de olabilir.