Bem, o caso genérico que funciona com qualquer comando que grava no stdout é usar xargs
, que permitirá anexar qualquer número de argumentos da linha de comando ao final de um comando:
$ find … | xargs grep 'search'
Ou para incorporar o comando na sua linha grep
com backticks ou $()
, que executará o comando e substituirá sua saída:
$ grep 'search' $(find …)
Observe que esses comandos não funcionam se os nomes dos arquivos contiverem espaços em branco ou outros "caracteres estranhos" ( \'"
para xargs, \[*?
para $(find …)
).
No entanto, no caso específico de find
, a capacidade de executar um programa nos argumentos fornecidos é incorporada:
$ find … -exec grep 'search' {} \;
Tudo entre -exec
e ;
é o comando para executar; {}
é substituído pelo nome de arquivo encontrado por find
. Isso executará um grep
separado para cada arquivo; como grep
pode pegar muitos nomes de arquivos e pesquisar todos eles, você pode alterar o ;
para +
para dizer ao find para passar todos os nomes de arquivos correspondentes para grep
de uma só vez:
$ find … -exec grep 'search' {} \+