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ı ararken, 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.
Bu, bunu yapmanın doğru yoluna yakın mı? Değilse, nasıl yapmalıyım? Dosyalarda metin dizeleri bulma yeteneği yaptığım bazı programlama projeleri için olağanüstü yararlı olacaktır.
-H
ile -l
(ve belki grep
birlikte fgrep
). Belirli ad kalıplarına sahip dosyaları hariç tutmak find
için daha gelişmiş bir şekilde kullanırsınız. Yine de kullanmayı öğrenmeye değer find
. Sadece man find
.
find … -exec <cmd> +
yazmak daha kolay ve daha hızlı find … -exec <cmd> \;
. Yalnızca <cmd>
herhangi bir sayıda dosya adı bağımsız değişkeni kabul ederse çalışır . <cmd>
Python veya Ruby komut dosyaları gibi yavaş başlıyorsa , yürütme süresindeki tasarruf özellikle büyüktür .
grep "pattern" path/*.txt
.
tek karakterli joker karakter olarak yorumlayacağını unutmayın . Benim tavsiyem daima fgrep veya egrep kullanmaktır.