linux - find -exec 无法识别参数

标签 linux bash unix

我正在尝试计算目录中文件的总行数。为此,我尝试结合使用 find 和 wc。但是,当我运行 find 时。 -exec wc -l {}\;,我收到错误 find: missing argument to -exec。我看不到任何明显的问题,有什么想法吗?

最佳答案

您只需要在 {}\;

之间留一个空格
find . -exec wc -l {} \;

请注意,如果当前位置有任何子目录,wc 将为它们中的每一个生成如下所示的错误消息:

wc: ./subdir: Is a directory

为避免该问题,您可能需要告诉 find 将搜索限制为文件:

find . -type f -exec wc -l {} \;

另一个注意事项:使用 -exec 选项是个好主意。太多次人们将命令组合在一起,想得到相同的结果,例如这里是:

 find . -type f | xargs wc -l

以这种方式使用管道命令的问题是,如果任何文件中有空格,它就会中断。例如,如果文件名为“a b”,wc 将分别收到“a”和“b”,您显然会收到 2 条错误消息:a: no such fileb: 没有这样的文件

除非您知道您的文件名中从来没有任何空格(或不可打印字符),否则如果您确实需要将命令组合在一起,则需要告诉所有工具您将管道连接在一起以使用 NULL 字符 (\0) 作为分隔符而不是空格。所以之前的命令会变成:

find . -type f -print0 | xargs -0 wc -l

关于linux - find -exec 无法识别参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26221372/

相关文章:

linux - 内核提交 list "Any new or modified CONFIG options don' t 搞砸了配置菜单”?

linux - 从帧缓冲区读取之前是否需要使缓存失效?

python - 访问在远程服务器上运行的 Ipython Notebook

linux - 如何执行 grep -B 之类的操作来仅选择一行?

regex - Linux bash : sed, awk 等工具将行尾正则表达式 '$' 匹配为终端宽度

linux - 如何在不指定完整路径的情况下运行程序?

linux - 从变量 unix 中提取值

linux - 在源压缩包中嵌入二进制 rpm

bash - 在 Azure 中触发 shell 脚本

android - 使用普通身份验证的 unix C++ 应用程序服务器未从 GCM xmpp ccs 接收到 <success>