Busca textual em arquivos
[Warning: This post is a backup recovery from my previous Wordpress blog. All content was automatically converted accessing a MySQL database using a Python script (details). Mostly are in Portuguese but if you are interest I can translate to English. If you found any problem dont’t hesitate to contact me in comments.]
Como resolver o problema de arquivos com espao em branco na hora de fazer uma busca textual?
Qualquer uma das trs 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 comeam 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 espao em branco iria atrapalhar a interpretao 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 solues est no prprio find:
$ find . -iname "nome*" -exec grep teste '{}' \;
teste 123
Contudo, importante saber o nmero da linha da ocorrncia e o nome do arquivo, logo:
find . -iname "nome*" -exec grep -n teste '{}' \; -print
1:teste 123
./c/c3/nome2 sobrenome2