56

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

cd mydir
wc -l *
..
11723 total

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

find . -print | wc -l --files0-from=-

不工作。

4

7 回答 7

101

你可能想要这个:

find . -type f -print0 | wc -l --files0-from=-

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

find . -type f -exec cat {} + | wc -l
于 2012-12-05T16:44:22.543 回答
9

也许您正在寻找exec.find

find . -type f -exec wc -l {} \; | awk '{total += $1} END {print total}'
于 2012-12-05T16:44:16.127 回答
6

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

find . -name '*.fileextension' | xargs wc -l

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

find . -name '*.fileextension1' -o -name '*.fileextension2' | xargs wc -l
于 2014-09-30T10:00:59.297 回答
4

另一种选择是使用递归 grep:

grep -hRc '' . | awk '{k+=$1}END{print k}'

awk 只是简单地将数字相加。使用的grep选项是:

   -c, --count
          Suppress normal output; instead print a count of matching  lines
          for  each  input  file.  With the -v, --invert-match option (see
          below), count non-matching lines.  (-c is specified by POSIX.)
   -h, --no-filename
          Suppress the prefixing of file names on  output.   This  is  the
          default  when there is only one file (or only standard input) to
          search.
   -R, --dereference-recursive
          Read all files under each directory,  recursively.   Follow  all
          symbolic links, unlike -r.

因此grep, 计算匹配任何内容 ('') 的行数,因此基本上只计算行数。

于 2014-09-30T13:33:29.487 回答
1

我会建议像

find ./ -type f | xargs wc -l | cut -c 1-8 | awk '{total += $1} END {print total}'
于 2012-12-05T16:41:43.507 回答
1

基于ДМИТРИЙ МАЛИКОВ的回答:

使用格式计算 Java 代码行数的示例:

一个班轮

find . -name *.java -exec wc -l {} \; | awk '{printf ("%3d: %6d %s\n",NR,$1,$2); total += $1} END {printf ("     %6d\n",total)}'

awk 部分:

{ 
  printf ("%3d: %6d %s\n",NR,$1,$2); 
  total += $1
} 
END {
  printf ("     %6d\n",total)
}

示例结果

  1:    120 ./opencv/NativeLibrary.java
  2:     65 ./opencv/OsCheck.java
  3:      5 ./opencv/package-info.java
        190
于 2020-01-01T10:19:35.483 回答
-2

在这里玩游戏有点晚了,但这不也行吗?find . -type f | wc -l

这会计算“find”命令输出的所有行。您可以微调“查找”以显示您想要的任何内容。我正在使用它来计算子目录的数量,在一个特定的子目录中,在 deep tree: find ./*/*/*/*/*/*/TOC -type d | wc -l中。输出:76435。(只是在没有所有中间星号的情况下进行查找会产生错误。)

于 2013-10-15T16:37:56.600 回答