Diretórios com nomes que contêm espaços, visíveis de /foo/bar
e não de barfoo
, são os prováveis culpados. xargs
divide sua saída por espaços e também interpreta citações, barras invertidas e até mesmo o caractere _
- consulte manual para detalhes, portanto os espaços em branco nos nomes de arquivos ou diretórios fazem com que ele passe nomes de arquivos incompletos para grep
.
Para contornar esse problema, use find -print0
em conjunto com xargs -0
, assim:
find . -print0 2>/dev/null | xargs -0 grep -i something_to_find 2>/dev/null
A opção -print0
informa find
para separar nomes de arquivos com um caractere binário 0, que não pode aparecer em um nome de arquivo válido. A opção -0
correspondente diz à parte para usar o mesmo caractere que o separador e também para não interpretar citações e barras invertidas.