Genellikle karmaşık klasör yapılarında kaynak kodu ararım ve aşağıdakileri kullanarak yararlı buluyorum:
cd /your/folder/
grep -rHino "your string"
Bu parametrelerle, find kullanmadan , dosyanın tam yolunu ve belirtilen dizeyi içeren satır numarasını ediniyorum .
Ayrıca bir rHino gibi aramanızla BASH esası nedeniyle hatırlamak kolaydır. :)
Bunun nasıl hızlı bir örnekle işe yaradığını göstereceğim.
Cat kullanarak bir dosyanın içeriğini görüntüleyelim:
jeeves ~ # cat fw.stop
#!/bin/sh
echo "Stopping firewall and allowing everyone..."
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
Ve şimdi "iptables -P" dizesini içeren tüm dosyaları tekrarlı olarak arayalım:
jeeves ~ # grep -rinHo "iptables -P"
fw.stop:9:iptables -P
fw.stop:10:iptables -P
fw.stop:11:iptables -P
Çıktıda görebileceğiniz gibi dosya adımız var: hit row: searched string
İşte kullanılan parametrelerin daha ayrıntılı bir açıklaması:
-r Her bir dizin işleneni için, bu dizindeki tüm dosyaları tekrar tekrar okuyun ve işleyin. Komut satırındaki sembolik bağları izleyin, ancak yinelemeli olarak karşılaşılan sembolik bağları atlayın. Dosya işlenen belirtilmezse, grep çalışma dizinini arar. Bu, '--directories = recurse' seçeneğiyle aynıdır.
-I Her eşleşme için dosya adını yazdırın. Aramak için birden fazla dosya olduğunda bu varsayılandır.
-n Her çıktı satırını, girdi dosyasında 1 tabanlı satır numarasıyla önekleyin. (-n POSIX tarafından belirtilmiştir.)
-H Her eşleşme için dosya adını yazdırın. Aramak için birden fazla dosya olduğunda bu varsayılandır.
-o Eşleşen çizgilerin yalnızca eşleşen (boş olmayan) kısımlarını, bu kısımların her biri ayrı bir çıktı satırında yazdırın. Çıkış satırları girişle aynı sınırlayıcıları kullanır ve -z (--null-data) da kullanılıyorsa sınırlayıcılar boş bayt'tır (bkz. Diğer Seçenekler).
find . -type f -fprint /dev/stderr -exec cat {} \; | grep some string