我想我可以用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