Como resolver o problema de arquivos com espaço em branco na hora de fazer uma busca textual?
Qualquer uma das três formas funciona:
1. find PATH -iname FILTRO -exec grep -n PALAVRA '{}' \; -print
2. find PATH -iname FILTRO -exec grep -n PALAVRA /dev/null '{}' \;
3. find PATH -iname FILTRO -exec grep -Hn PALAVRA '{}' \;
Exemplo:
Vamos imaginar a seguinte hieraquia de pastas e arquivos:
$ find . -iname "nome*"
Mostre todos os arquivos que começam com “nome”
./c/c3/nome2 sobrenome2
./c/c3/nome1 sobrenome1
./b/b2/nome1 sobrenome1 final1
./b/b3/nome2 sobrenome2
./b/b1/nome1 sobrenome2 mais um pouco
./a/a3/nome1 sobrenome1
./a/a1/nome2 sobrenome3
./a/a1/nome sobrenome
./a/a1/nome1 sobrenome1
Para fazer a busca do algum texto dentro desses arquivos, poderiamos pensar algo como:
$ find . -iname "nome*" | xargs grep teste
Mas o espaço em branco iria atrapalhar a interpretação dos arquivos…
grep: ./c/c3/nome2: No such file or directory
grep: sobrenome2: No such file or directory
grep: ./c/c3/nome1: No such file or directory
grep: sobrenome1: No such file or directory
(…)
grep: ./a/a1/nome1: No such file or directory
grep: sobrenome1: No such file or directory
Uma das soluções está no próprio find:
$ find . -iname "nome*" -exec grep teste '{}' \;
teste 123
Contudo, é importante saber o número da linha da ocorrência e o nome do arquivo, logo:
find . -iname "nome*" -exec grep -n teste '{}' \; -print
1:teste 123
./c/c3/nome2 sobrenome2
