使用以下这条脚本语句可以获得DIR目录下的所有FILETYPE(如*.c、*.cc等)代码行数。
sudo find ${_DIR} -name ${_FILETYPE} |xargs cat|grep -v ^$|wc -l
其中,grep -v ^将空行排除,xargs的作用是将参数列表转换成小块分段传递给其他命令,以避免参数列表过长的问题。
可以把这条指令写成如下函数来进行调用,同时对代码的行数进行累加。
_DIR=$1
cat_ret()
{
sudo find ${_DIR} -name $1 |xargs cat|grep -v ^$|wc -l
}
ret=$(cat_ret "*.c")
cnt=$ret
echo ".c文件代码行数:$ret"
ret=$(cat_ret "*.cpp")
cnt=$(( $cnt + $ret ))
echo ".cpp文件代码行数:$ret"
ret=$(cat_ret "*.cc")
cnt=$(( $cnt + $ret ))
echo ".cc文件代码行数:$ret"
ret=$(cat_ret "*.h")
cnt=$(( $cnt + $ret ))
echo ".h文件代码行数:$ret"
ret=$(cat_ret "*.py")
cnt=$(( $cnt + $ret ))
echo ".py文件代码行数:$ret"
ret=$(cat_ret "*.java")
cnt=$(( $cnt + $ret ))
echo ".java文件代码行数:$ret"
echo "文件总行数:$cnt"
使用脚本时,参数为要查找的目录,结果如下:
$ ./lineNumber.sh hypatia
.c文件代码行数:957
.cpp文件代码行数:3151
.cc文件代码行数:505240
.h文件代码行数:453520
.py文件代码行数:766252
.java文件代码行数:0
文件总行数:1729120