grep -Rn "your_string" *
Deve fazer o truque.
Eu tenho uma hierarquia de diretórios de arquivos (alguns dos quais são texto plano e outros são binários).
Existe uma maneira fácil de pesquisar recursivamente a hierarquia de arquivos e diretórios para os nomes de quaisquer arquivos que contenham uma string especificada e imprimir uma lista de "caminho para o nome do arquivo e o número da linha" se possível?
Basicamente, o que eu quero é mais ou menos o mesmo que o seguinte, exceto, talvez, com uma opção para imprimir os números de linha são impressos também:
#!/bin/bash
#
# Recursively search files for pattern specified as argument.
#
pattern="$1"
if [ -z "$pattern" ]; then echo "$0: Unspecified pattern."; exit; fi
searchfiles () {
for filename in *; do
if [ -f "$filename" ]; then {
result='/bin/grep -e "$pattern" "$filename"'
if ! [ -z "$result" ]; then echo "File: 'pwd'/$filename"; fi
}
elif [ -d "$filename" ]; then
cd "$filename"
searchfiles
cd ..
fi
done
}
searchfiles
OK, como sugerido abaixo, eu poderia usar grep recursivo, mas eu só preciso do nome do arquivo e número da linha, já que a impressão do conteúdo pode ficar confusa se houver são muitas linhas longas que envolvem o terminal quando impressas, então aqui estava a minha solução:
grep -Rn index.php * | sed -e 's/ .*//g'
Atenciosamente,
John Goche