45

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

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

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

4

4 回答 4

86

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

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

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

于 2012-07-25T13:00:31.080 回答
15

发生这种情况是因为您在某处的文件名中有一个单引号......

即,->'

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

\find . | grep \' 

你也可以像这样运行 xargs 来有效地解决这个问题:

xargs -I

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

\find . | \xargs ....

\ 只是意味着“运行没有任何别名的命令”

于 2014-09-14T01:22:43.730 回答
5

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

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

find . "(" -name "*.m" -or -name "*.h" ")" -exec wc -l "{}" \;
于 2018-09-09T09:41:20.517 回答
1

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

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

.指正在运行搜索的位置

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

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

您需要\;向 exec 命令表示该cp语句正在结束。

于 2018-09-23T03:13:12.237 回答