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