encontrar -print0 | xargs -0 grep não funciona como esperado no Ubuntu 10.04

encontrar -print0 | xargs -0 grep não funciona como esperado no Ubuntu 10.04

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 {} + 

informação relacionada