Se você quiser usar find
output em xargs
, a maneira recomendada é canalizá-lo usando NUL
caracteres para delimitar cada nome de arquivo:
find src/main -name "*" -print0 | xargs -0 grep -i 'mystring'
A razão para isso é que o shell (e xargs
especificamente) geralmente divide argumentos (ou insira no caso de xargs
) com base no espaço em branco, ou seja, espaços, tabulações e novas linhas. Depois de usar -0
, xargs
lerá cada campo separado por NUL
, que é o que find -print0
produz.
Isso funcionará no GNU find
e xargs
, bem como nas versões incluídas no OS X. Outras versões podem não ter as opções, pois elas não são necessárias no POSIX.
Mas, novamente, isso não é realmente necessário. O padrão de nome "*"
se expande para todos os nomes possíveis. grep
pode reciclar sozinho, então tudo que é necessário é:
grep -ri 'mystring' src/main
No Bash 4 (não fornecido com o OS X por padrão), você também pode fazer globalização recursiva, por exemplo sobre todos os arquivos .txt
, usando a opção globstar
:
shopt -s globstar
grep -i 'mystring' **/*.txt