用于计算Python或Bash中的代码行数的实用程序

Jus*_*tin 15 python bash lines-of-code

在python或bash脚本中是否存在快速而肮脏的方式,它可以递归地下降目录并计算代码行的总数?我们希望能够排除某些目录.

例如:

start at: /apps/projects/reallycoolapp
exclude: lib/, frameworks/
Run Code Online (Sandbox Code Playgroud)

排除的目录也应该是递归的.例如:

/app/projects/reallycool/lib SHOULD BE EXCLUDED
/app/projects/reallycool/modules/apple/frameworks SHOULD ALSO BE EXCLUDED
Run Code Online (Sandbox Code Playgroud)

这将是一个非常有用的实用程序.

Jus*_*tin 37

找到了一个很棒的实用程序CLOC.https://github.com/AlDanial/cloc

这是我们运行的命令:

perl cloc.pl /apps/projects/reallycoolapp --exclude-dir=lib,frameworks
Run Code Online (Sandbox Code Playgroud)

这是输出

--------------------------------------------------------------------------------
Language                      files          blank        comment           code   
--------------------------------------------------------------------------------
PHP                              32            962           1352           2609
Javascript                        5            176            225            920
Bourne Again Shell                4             45             70            182
Bourne Shell                     12             52            113            178
HTML                              1              0              0             25
--------------------------------------------------------------------------------
SUM:                             54           1235           1760           3914
--------------------------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)

  • 好,虽然它不是Python,也不是Bash :) (3认同)
  • 在 debian、ubuntu 等上:`sudo apt install cloc` (2认同)

Lyn*_*nch 13

只有findwc论证可以解决你的问题.

随着find您可以指定这样的非常复杂的逻辑:

find /apps/projects/reallycoolapp -type f -iname '*.py' ! -path '*/lib/*' ! -path '*/frameworks/*' | xargs wc -l
Run Code Online (Sandbox Code Playgroud)

这里!反转条件,因此该命令将计算不在'lib /'或'frameworks /'目录中的每个python文件的行.

只是不要忘记'*'或它不会匹配任何东西.


mla*_*the 4

find ./apps/projects/reallycool -type f | \
     grep -v -e /app/projects/reallycool/lib \
             -e /app/projects/reallycool/modules/apple/frameworks | \
     xargs wc -l | \
     cut -d '.' -f 1 | \
     awk 'BEGIN{total=0} {total += $1} END{print total}'
Run Code Online (Sandbox Code Playgroud)

一些注意事项...

  1. 这 。查找之后很重要,因为这就是cut命令如何将计数与文件名分开
  2. 这是一个多行命令,因此请确保转义斜杠后面没有空格
  3. 您可能需要排除其他文件,例如 svn 或其他文件。此外,这将为二进制文件提供有趣的值,因此您可能需要使用 grep 将您感兴趣的特定文件类型列入白名单,即:grep -e .html$ -e .css$