Eu sempre pesquiso 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 o find , obtenho o caminho completo do arquivo e o número da linha que contém as cadeias especificadas .
Também é fácil lembrar, porque é BASH através de sua pesquisa como um rHino :)
Mostrarei 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 para todos os arquivos que contenham 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 filename: hit row: string pesquisada
Aqui está uma descrição mais detalhada dos parâmetros usados:
-r For each directory operand, read and process all files in that directory, recursively. Follow symbolic links on the command line, but
skip symlinks that are encountered recursively. Note that if no file
operand is given, grep searches the working directory. This is the
same as the ‘--directories=recurse’ option.
-i Print the file name for each match. This is the default when there is more than one file to search.
-n Prefix each line of output with the 1-based line number within its input file. (-n is specified by POSIX.)
-H Print the file name for each match. This is the default when there is more than one file to search.
-o Print only the matched (non-empty) parts of matching lines, with each such part on a separate output line. Output lines use the same
delimiters as input, and delimiters are null bytes if -z (--null-data)
is also used (see Other Options).