Obtendo xargs: citação não terminada ao tentar localizar texto em arquivos

1

Estou usando o Mac 10.9.5 com o bash shell. Eu estou tentando procurar por instâncias de texto dentro de um grupo de arquivos, mas por algum motivo, em um diretório específico, eu recebo este erro bizarro "Unterminated quote" ...

Daves-MacBook-Pro:sbadmin davea$ find src/main/webapp/WEB-INF/ -name "*" | xargs grep 'addresses' > /tmp/addr
xargs: unterminated quote

Alguma idéia de como resolver isso?

    
por Dave 30.10.2014 / 20:37

1 resposta

3

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:

  1. Use a opção -print0 para find e -0 para xargs :

    find src/main/webapp/WEB-INF/ -name "*" -print0 | xargs -0 grep 'addresses' > /tmp/addr
    

    Esta é a maneira recomendada de canalizar de find para xargs porque 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 f para filtrar apenas arquivos. E você poderia, claro, chamar um programa de dentro de find , também:

    find … -type f -exec grep 'addresses' {} \; > /tmp/addr
    

    Mas isso também não é recomendado. Veja a segunda opção:

  2. Use uma abordagem mais eficiente - recursiva grep ing com a opção -r :

    grep -r 'addresses' src/main/webapp/WEB-INF/ > /tmp/addr
    
por 30.10.2014 / 20:47

Tags