在所有子目录上使用wc来计算行的总和

Jon*_*ein 41 linux bash console-application text-files

如何计算所有子目录中所有文件的所有行wc

cd mydir
wc -l *
..
11723 total
Run Code Online (Sandbox Code Playgroud)

man wc建议wc -l --files0-from=-,但我不知道如何生成所有文件的列表NUL-terminated names

find . -print | wc -l --files0-from=-
Run Code Online (Sandbox Code Playgroud)

不工作.

gni*_*urf 79

你可能想要这个:

find . -type f -print0 | wc -l --files0-from=-
Run Code Online (Sandbox Code Playgroud)

如果您只想要总行数,可以使用

find . -type f -exec cat {} + | wc -l
Run Code Online (Sandbox Code Playgroud)

  • @ДМИТРИЙМАЛИКОВ为什么? (8认同)
  • 我用'找到.-type f -print0 | wc -l --files0-from = -`它工作正常并返回结尾的总和. (6认同)
  • 无用的猫 (3认同)
  • 在 Mac 上,第 1 条给出:`wc: 非法选项 -- -` (3认同)

ДМИ*_*КОВ 8

也许你正在寻找的exec选择find.

find . -type f -exec wc -l {} \; | awk '{total += $1} END {print total}'
Run Code Online (Sandbox Code Playgroud)

  • 如果您碰巧有这样的文件,这也完全打破了:尝试`touch $'hello \n1000000'`.惊喜! (5认同)
  • 这是低效的,因为你为每个文件生成一个新的`wc`.``:-( (4认同)

Ank*_*kur 5

要计算您可以使用的特定文件扩展名的所有行,

find . -name '*.fileextension' | xargs wc -l
Run Code Online (Sandbox Code Playgroud)

如果你想在两个或更多不同类型的文件上使用它,你可以放 -o 选项

find . -name '*.fileextension1' -o -name '*.fileextension2' | xargs wc -l
Run Code Online (Sandbox Code Playgroud)

  • 这会中断名称中带有空格或“\”的任何文件。有关如何正确使用此方法,请参阅 [已接受的答案](http://stackoverflow.com/a/13728131/1081936)。 (4认同)