得到错误" xargs未终结的引用"当试图打印终端中的行数

时间:2012-07-25 12:37:23

标签: macos xargs

我想获取应用程序中的行数。我正在使用此代码:

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

它在其他应用程序中运行良好,但对于我的一个应用程序,它给出错误“xargs unterminated quote”。

4 个答案:

答案 0 :(得分:63)

您的某个文件名中是否有引号?尝试这样的事情:

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

-print0参数告诉find使用NULL字符终止它打印出来的每个名字。 -0参数告诉xargs它的输入标记是以NULL结尾的。这避免了字符的问题,否则将被视为特殊字符,如引号。

答案 1 :(得分:7)

这可能发生,因为你在某个文件名中有一个单引号...

ie - > '

要查找问题文件,请在终端中运行以下命令:

\find . | grep \' 

如果您有xargs设置的别名导致问题,也会发生这种情况。要测试是否是这种情况,只需使用' \'运行xargs。在它面前,例如

\find . | \xargs ....

" \"只是意味着"运行命令而没有任何别名"

答案 2 :(得分:0)

使用find时解决引号,空格和特殊字符问题的规范方法是使用-exec选项而不是xargs

对于您的情况,您可以使用:

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

答案 3 :(得分:0)

经过一番修补,我发现此命令对我有用(因为我的文件名中包含空格和不匹配的引号):

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

.是指搜索运行的位置

-iname后跟表达式是指匹配条件

-exec cp "{}" /Directory/to/put/file/ \;告诉命令执行复制命令,其中通过-iname找到的每个文件替换为"{}"

您需要\;来表示exec命令cp语句即将结束。