Frequentemente procuro o código-fonte em estruturas de pastas complexas e acho útil usar:
cd /your/folder/
grep -rHino "your string"
Com esses parâmetros, sem usar find , obtenho o caminho completo do arquivo e o número da linha que contém a sequência especificada .
Também é fácil lembrar, porque o BASH é através da sua pesquisa como um rHino :)
Vou mostrar como isso funciona com um exemplo rápido.
Vamos exibir o conteúdo de um arquivo usando cat:
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
E vamos procurar recursivamente todos os arquivos que contêm a string "iptables -P":
jeeves ~ # grep -rinHo "iptables -P"
fw.stop:9:iptables -P
fw.stop:10:iptables -P
fw.stop:11:iptables -P
Como você pode ver na saída, temos o nome do arquivo: hit row: search string
Aqui está uma descrição mais detalhada dos parâmetros usados:
-r Para cada operando de diretório, leia e processe todos os arquivos nesse diretório, recursivamente. Siga os links simbólicos na linha de comando, mas pule os links simbólicos encontrados recursivamente. Observe que, se nenhum operando de arquivo for fornecido, o grep pesquisará o diretório de trabalho. É o mesmo que a opção '--directories = recurse'.
-i Imprime o nome do arquivo para cada correspondência. Esse é o padrão quando há mais de um arquivo para pesquisar.
-n Prefixa cada linha de saída com o número da linha com base em 1 em seu arquivo de entrada. (-n é especificado pelo POSIX.)
-H Imprime o nome do arquivo para cada correspondência. Esse é o padrão quando há mais de um arquivo para pesquisar.
-o Imprima apenas as partes correspondentes (não vazias) das linhas correspondentes, com cada uma dessas partes em uma linha de saída separada. As linhas de saída usam os mesmos delimitadores da entrada e os delimitadores são bytes nulos se -z (--null-data) também for usado (consulte Outras opções).
find . -type f -fprint /dev/stderr -exec cat {} \; | grep some string