find $MYUSR -type f -print0 | xargs -0 -n 10 grep -i -l 'this table...'
As opções para find
são
-
-type f
- não queremos pesquisar diretórios (apenas arquivos neles), dispositivos etc -
-print0
- queremos poder manipular nomes de arquivos contendo espaços
As opções para xargs
são
-
-0
- Por causa de find -print0 -
-n 10
- Executa o grep em 10 arquivos por vez (útil quando não estiver usando o-l
do grep)
As opções para o grep são
-
-i
- ignorar maiúsculas e minúsculas -
-l
- apenas lista nomes de arquivos (nem todas as linhas correspondentes) -
-f
- trata os pontos na expressão de pesquisa como simples pontos.
Para iniciar no diretório atual, substitua $MYUSR
por .
Atualização (um colega superusuário sugeriu find -type f -exec grep -i "this table..." +
)
$ ls -1
2011
2011 East
2011 North
2011 South
2012
$ find -type f -exec grep -i 'this table...'
find: missing argument to '-exec'
$ find -type f -exec grep -i 'this table...' +
find: missing argument to '-exec'
$ find -type f -exec grep -i 'this table...' {} \;
this table... is heavy
THIS TABLE... is important
this table... is mine
this table... is all alike
this table... is twisty
Mas isso não é útil, você quer nomes de arquivos
$ find -type f -exec grep -i -l 'this table...' {} \;
./2011 East
./2011
./2011 North
./2011 South
./2012
OK, mas muitas vezes você também quer ver o conteúdo da linha correspondente
Se você quiser nomes de arquivos E conteúdo de linha correspondente, eu faço desta maneira:
$ find -type f -print0 | xargs -0 -n 10 grep -i 'this table...';
./2011 East:this table... is heavy
./2011:THIS TABLE... is important
./2011 North:this table... is mine
./2011 South:this table... is all alike
./2012:this table... is twisty
Mas sem "old skool" -print0
e -0
você terá uma bagunça
$ find -type f | xargs -n 10 grep -i 'this table...';
./2011:THIS TABLE... is important
grep: East: No such file or directory
./2011:THIS TABLE... is important
./2011:THIS TABLE... is important
grep: North: No such file or directory
./2011:THIS TABLE... is important
grep: South: No such file or directory
./2012:this table... is twisty