Belirli bir metin dizesi içeren tüm dosyalar için tüm Linux sistemimi taramanın bir yolunu bulmaya çalışıyorum. Sadece açıklığa kavuşturmak için, dosya adında değil, dosya içinde metin arıyorum.
Bunu nasıl yapacağımı araştırırken, bu çözüme iki kez rastladım:
find / -type f -exec grep -H 'text-to-find-here' {} \;
Ancak, işe yaramıyor. Sistemdeki her bir dosyayı görüntülüyor gibi görünüyor.
Bunu yapmanın doğru yolu bu mu? Değilse, nasıl yapmalıyım? Dosyalardaki metin dizelerini bulma yeteneği, yaptığım bazı programlama projeleri için olağanüstü yararlı olacaktır.
Aşağıdakileri yapın:
grep -rnw '/path/to/somewhere/' -e 'pattern'
-r
veya -R
özyinelemelidir,-n
satır numarasıdır ve-w
tüm kelimeyi eşleştir anlamına gelir.-l
(küçük harf L) eklenebilir.Bunların yanı sıra, --exclude
, --include
, --exclude-dir
bayrakları verimli arama için kullanılabilir:
Bu sadece .c veya .h uzantılı dosyalar arasında arama yapacaktır:
grep --include=\*.{c,h} -rnw '/path/to/somewhere/' -e "pattern"
Bu, .o uzantısı ile biten tüm dosyaların aranmasını hariç tutacaktır:
grep --exclude=*.o -rnw '/path/to/somewhere/' -e "pattern"
Dizinler için --exclude-dir
parametresi aracılığıyla belirli dizin(ler)i hariç tutmak mümkündür. Örneğin, bu dir1/, dir2/ dizinlerini ve *.dst/ ile eşleşen tüm dizinleri hariç tutacaktır:
grep --exclude-dir={dir1,dir2,*.dst} -rnw '/path/to/somewhere/' -e "pattern"
Bu, sizinkiyle neredeyse aynı amaca ulaşmak için benim için çok iyi çalışıyor.
Daha fazla seçenek için man grep
seçeneğine bakın.
grep -ilR` kullanabilirsiniz:
grep -Ril "text-to-find-here" /
/
makinenizin kök dizininden başlamak anlamına gelir.ack]1 kullanabilirsiniz. Kaynak kodu için grep gibidir. Bununla tüm dosya sisteminizi tarayabilirsiniz.
Sadece yap:
ack 'text-to-find-here'
Kök dizininizde.
Ayrıca düzenli ifadeler kullanabilir, dosya türünü vb. belirtebilirsiniz.
GÜNCELLEME
Ack gibi ama ondan 3-5 kat daha hızlı olan ve hatta .gitignore
dosyasındaki kalıpları yok sayan The Silver Searcher'ı yeni keşfettim.