1

Я использую Mac 10.9.5 с оболочкой bash. Я пытаюсь найти экземпляры текста в группе файлов, но по какой-то причине в одном конкретном каталоге я получаю эту причудливую ошибку "Unterminated quote" ...

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

Есть идеи как решить это?

1 ответ1

3

Это происходит потому, что одно из имен файлов содержит кавычки и передается в xargs как есть. Это означает , что xargs управляют как xargs grep 'addresses' > /tmp/addr some file'name - и есть незавершенная '

Проблема в том, что вы используете find | xargs Это то, что вы действительно не хотите делать, даже если это выглядит заманчиво.

Есть несколько решений этой проблемы:

  1. Используйте параметр -print0 для find и -0 для xargs:

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

    Это рекомендуемый способ передачи из find в xargs поскольку он может работать с любым именем файла, даже с теми, которые содержат переводы строк.

    Обратите внимание, что использование -name "*" является излишним. Вам также следует рассмотреть возможность использования -type f для фильтрации только файлов. И, конечно, вы также можете вызвать программу из find:

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

    Но это тоже не рекомендуется. Смотрите второй вариант:

  2. В целом используйте более эффективный подход - рекурсивный grep с опцией -r:

    grep -r 'addresses' src/main/webapp/WEB-INF/ > /tmp/addr
    

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .