Isso acontece porque um dos nomes de arquivo contém uma cotação e é passado para xargs como está. Isso significa que xargs é executado como xargs grep 'addresses' > /tmp/addr some file'name - e há um ' não finalizado aqui.
O problema real é que você está usando find | xargs . Isso é algo que você realmente não quer fazer, mesmo que pareça tentador.
Existem algumas soluções para este problema:
-
Use a opção
-print0parafinde-0paraxargs:find src/main/webapp/WEB-INF/ -name "*" -print0 | xargs -0 grep 'addresses' > /tmp/addrEsta é a maneira recomendada de canalizar de
findparaxargsporque ele pode lidar com qualquer nome de arquivo, mesmo aqueles que contenham novas linhas.Observe que usar
-name "*"é supérfluo. Você também deve considerar usar-type fpara filtrar apenas arquivos. E você poderia, claro, chamar um programa de dentro defind, também:find … -type f -exec grep 'addresses' {} \; > /tmp/addrMas isso também não é recomendado. Veja a segunda opção:
-
Use uma abordagem mais eficiente - recursiva
greping com a opção-r:grep -r 'addresses' src/main/webapp/WEB-INF/ > /tmp/addr