计算 Python 或 Bash 代码行数的工具
有没有一种简单粗暴的方法,可以用Python或者Bash脚本,递归地遍历一个文件夹,统计里面代码的总行数?我们希望能够排除某些特定的文件夹。
举个例子:
start at: /apps/projects/reallycoolapp
exclude: lib/, frameworks/
被排除的文件夹也应该是递归的。比如:
/app/projects/reallycool/lib SHOULD BE EXCLUDED
/app/projects/reallycool/modules/apple/frameworks SHOULD ALSO BE EXCLUDED
这个工具会非常有用。
3 个回答
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}'
几点说明...
- 在
find
后面的点(.)很重要,因为这是cut
命令用来分开文件数量和文件名的方式。 - 这是一个多行命令,所以确保在转义符号后面没有空格。
- 你可能需要排除其他文件,比如 svn 之类的。此外,对于二进制文件,这个命令可能会给出奇怪的值,所以你可能想用 grep 来过滤出你感兴趣的特定文件类型,比如:
grep -e .html$ -e .css$
。
15
单靠 find
和 wc
的参数就能解决你的问题。
使用 find
命令,你可以指定非常复杂的逻辑,比如这样:
find /apps/projects/reallycoolapp -type f -iname '*.py' ! -path '*/lib/*' ! -path '*/frameworks/*' | xargs wc -l
这里的 !
是用来反转条件的,所以这个命令会统计每个 Python 文件的行数,但不包括在 'lib/' 或 'frameworks/' 目录下的文件。
记得不要忘了 *
,否则它将不会匹配任何东西。
41
发现了一个很棒的工具,叫做CLOC。你可以在这里找到它:https://github.com/AlDanial/cloc
我们运行的命令是:
perl cloc.pl /apps/projects/reallycoolapp --exclude-dir=lib,frameworks
这是输出结果:
--------------------------------------------------------------------------------
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
--------------------------------------------------------------------------------