find -exec不识别参数

时间:2014-10-06 17:19:03

标签: linux bash unix

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

2 个答案:

答案 0 :(得分:4)

您只需要{}\;

之间的空格
find . -exec wc -l {} \;

请注意,如果当前位置有任何子目录,wc将为每个子目录生成一个类似的错误消息:

wc: ./subdir: Is a directory

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

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

另一个注意事项:使用-exec选项的好主意。很多时候人们一起管道命令以获得相同的结果,例如在这里它将是:

 find . -type f | xargs wc -l

管道命令以这种方式出现的问题是,如果任何文件中有空格,它就会中断。例如,如果文件名为“ab”,wc将分别收到“a”,然后是“b”,您显然会收到2条错误消息:a: no such fileb: no such file。< / p>

除非您知道您的文件名中没有任何空格(或不可打印的字符),否则如果您需要将命令一起管道,则需要告诉所有工具您正在一起使用NULL字符(\ 0)作为分隔符而不是空格。所以上一个命令将成为:

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

答案 1 :(得分:1)

对于bash版本4.0或更高版本,您根本不需要find命令:

shopt -s globstar
wc -l **/*

没有简单的方法可以跳过目录,正如您可能想要的Gui Rava所指出的那样,除非您可以仅通过名称来区分文件和目录。例如,目录中的名称可能永远不会有.,而所有文件都至少有一个扩展名:

wc -l **/*.*