我想获取我的应用程序中的行数。我正在使用这段代码:
find . "(" -name "*.m" -or -name "*.h" ")" -print | xargs wc -l
它在其他应用程序中运行良好,但对于我的一个应用程序,它给出了错误“xargs unterminated quote”。
您的文件名中是否有引号?尝试这样的事情:
find . "(" -name "*.m" -or -name "*.h" ")" -print0 | xargs -0 wc -l
该-print0
参数告诉find
使用 NULL 字符来终止它打印出的每个名称。该-0
参数告诉xargs
它的输入标记是 NULL 终止的。这避免了字符问题,否则将被视为特殊字符,如引号。
发生这种情况是因为您在某处的文件名中有一个单引号......
即,->'
要查找问题文件,请在终端中运行以下命令:
\find . | grep \'
你也可以像这样运行 xargs 来有效地解决这个问题:
xargs -I
如果您有导致问题的 xargs 设置的别名,也可能发生这种情况。要测试是否是这种情况,只需\
在其前面运行 xargs ,例如
\find . | \xargs ....
\ 只是意味着“运行没有任何别名的命令”
使用时解决引号、空格和特殊字符问题的规范方法find
是使用-exec
选项而不是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
语句正在结束。