我想我可以用wc以某种方式做到这一点,如果有一个递归选项但我不确定。我想要一个目录及其子目录下的文件中的总字数总数(不仅仅是每个文件的字数)。
注意我用我的mac执行此操作。
好的,我刚试过这个命令
find enwiki/ -type f | xargs wc -w > output.txt
生成的输出文件有6425104行,表示有很多文件。但最终的总字数只有381609.或许,计算的字总数超过了bash允许的最大值?我不确定是否发生了这种情况,或者我是否错误地使用了wc。
我想我可以用wc以某种方式做到这一点,如果有一个递归选项但我不确定。我想要一个目录及其子目录下的文件中的总字数总数(不仅仅是每个文件的字数)。
注意我用我的mac执行此操作。
好的,我刚试过这个命令
find enwiki/ -type f | xargs wc -w > output.txt
生成的输出文件有6425104行,表示有很多文件。但最终的总字数只有381609.或许,计算的字总数超过了bash允许的最大值?我不确定是否发生了这种情况,或者我是否错误地使用了wc。
Answers:
利用find找到的所有文件,然后用它们串联cat和级联流与计算的话wc:
find . -type f -print0 | xargs -0 cat | wc -w
该-print0给的说法find,如果你在你的文件的名称空间是必要的。当-print0被使用find,该-0标志必须搭配使用xargs。
如果您wc有--files0-from选择权,可以这样做:
find . -type f -print0 | wc -w --files0-from=-
说明:
我通过首先阅读wc(1)手册页找到了这个解决方案,看看哪些选项可用于扫描多个文件。我找到了这个:
--files0-from=F
read input from the files specified by NUL-terminated names in file F;
If F is - then read names from standard input
从find之前的使用,我知道它可以生成所需的文件列表,并使用该-print0选项,将文件输出为以NULL结尾的名称列表。
把它放在一起导致上面的命令。该find命令在当前目录(.)和所有子目录中搜索常规文件(-type f)并将其完整路径名称打印到标准输出,每个名称后跟一个空字符而不是通常的换行符(-print0)。该结果是piped(|)到标准输入中wc,从指定的文件(--files0-from=)中读取该列表,其中-表示标准输入,并打印-w在每个文件中找到的单词数(),后跟找到的所有单词的总数。
如果你感兴趣的是总数,你可以将它附加到上面的命令。
| tail -1