Eu tenho um problema um pouco estranho.
Se eu correr:
find . -iname '*.php' -o -iname '*.pl' -o -iname '*.html' | xargs grep -i users
Recebo muitos erros para nomes de arquivos que contêm espaços, mas também alguns arquivos correspondem.
No entanto, se eu tentar o seguinte para que os nomes de arquivos com espaços sejam tratados corretamente, nenhuma correspondência será retornada:
find . -iname '*.php' -o -iname '*.pl' -o -iname '*.html' -print0 | xargs -0 grep -i users
O que estou fazendo de errado? O segundo comando deve retornar pelo menos os mesmos arquivos correspondentes do primeiro, mas não recebo nenhuma correspondência.
Responder1
E a resposta é:
find . \( -iname '*.php' -o -iname '*.pl' -o -iname '*.html' \) -print0 | xargs -r0 grep -i users
Isso funciona. Eu não tinha visto isso antes, mas um colega me contou sobre isso.
Responder2
Você não precisa de print0 e xargs, essa funcionalidade já está incorporada no find:
find . -iname "*.php" -o -iname "*.pl" -o -iname "*.html" -exec grep -i users {} +