Получение ошибки "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 заявление заканчивается.