Получение ошибки "xargs unterminated quote" при попытке распечатать количество строк в терминале

Я хочу получить количество строк в моем приложении. Я использую этот код:

find . "(" -name "*.m" -or -name "*.h" ")" -print | xargs wc -l

он отлично работает в других приложениях, но для одного из моих приложений он дает ошибку "xargs unterminated quote".

4 ответов


есть ли в одном из ваших имен файлов цитата? Попробуйте что-то вроде этого:

find . "(" -name "*.m" -or -name "*.h" ")" -print0 | xargs -0 wc -l

на говорит find использовать символ NULL для завершения каждого имени, которое он распечатывает. The


Это может произойти, потому что у вас есть одна цитата в имени файла где-то...

ie ->'

чтобы найти файл проблемы, запустите в терминале следующее:

\find . | grep \' 

и это также может произойти, если у вас есть псевдоним для установки xargs, который вызывает проблему. Чтобы проверить, так ли это, просто запустите xargs с " \ " перед ним, например

\find . | \xargs ....

" \ "просто означает" выполнить команду без каких-либо псевдонимов"


канонический способ решения кавычек, пробелов и специальных символов при использовании find использовать вместо xargs.

для вашего случая вы можете использовать:

find . "(" -name "*.m" -or -name "*.h" ")" -exec wc -l "{}" \;

после некоторой возни я обнаружил, что эта команда работает для меня (потому что у меня были пробелы и непревзойденные цитаты в моих именах файлов):

find . -iname "*USA*" -exec cp "{}" /Directory/to/put/file/ \;

. относится к местоположению, в котором выполняется поиск

-iname с последующим выражением относится к критериям соответствия

-exec cp "{}" /Directory/to/put/file/ \; сообщает команде выполнить команду копирования, где каждый файл найден через -iname заменяет "{}"

вам нужно \; для обозначения на команды exec, что cp заявление заканчивается.