进行软著申请的时候,相关负责人经常会来找开发提供文件数量和代码量信息,很多开发,尤其前端,不太清楚该如何快速计算这两个结果,我们这里来普及一下吧。
计算文件数和代码量,这种事情,其实接触过shell的人,就了解,并不是多么复杂的事情,只需要一条命令、几秒钟的计算时间,就搞定了。那么具体该怎么操作呢?
计算文件数
计算文件数通常使用的是ls
命令。
命令格式
ls [选项] [目录名/文件名]
命令参数
-d ## 显示当前目录的上层目录,不显示子目录
-a ## 显示当前目录下的所有子目录,包括隐藏的文件
-l ## 显示当前目录下所有文件的所有信息(除隐藏文件夹外)文件名 子目录的权限 使用者 文件大小 等
-s ## 在每个文件后面显示文件的大小(我觉得-s 表示的是size的意思)
-k ## 树上说以k字节的形式表示文件的大小(我未曾直观的看到怎样以k 字节表示)
-u ## 以文件上次访问的时间排序(我试出来的结果是倒序)
-t ## 以时间排序(应该是以最近访问排序)
-o ## 显示除组信息外的气其他详细信息
-x ## 按列输出横向排序
-r ## 对目录反向排序
-q ## 用“?”表示不可输出的字符(简单尝试为看出效果)
-m ## 横向输入文件名,并且用“,”作为分隔符
-S ## 以文件大小排序(注意大写)
-R ## 列出所有子目录下的文件
-pF ## 在文件后面附上一个字符说明文件的类型。“×”表示可执行文件,“/”表示目录,“@”表示符号链接,“|”表示FIFo(FIFO表示管道,),“=”表示套接字
-C ## 按列输出,纵向排序
-Q ## 把输出的文件名用双引号括起来
用ls命令计算当前文件夹下的文件数
计算文件数,这个描述看起来不复杂,但是细化一下,也会有很多不同的需求,我们举三个常见的细化需求:
不包含目录
ls -l | grep "^-" | wc -l
包含子目录
ls -lR| grep "^-" | wc -l
当前目录下文件夹的个数
ls -lR | grep "^d" | wc -l
计算代码量
计算代码量,我们通常以代码行数为单位。计算代码量的方法有很多,我们这里用find
来实现。
命令格式
find [路径] [选项] [操作]
命令参数
-name ## 根据文件名查找
-perm ## 根据文件权限查找
-prune ## 该选项可以排除某些查找目录
-user ## 根据文件属主查找
-group ## 根据文件属组查找
-mtime-n|+n ## 根据文件更改时间查找
-nogroup ## 查找无有效属组的文件
-nouser ## 查找无有效属主的文件
-newer file1!file2 ## 查找更改时间比file1新但比file2|日IDE文件
-type ## 按文件类型查找
-size-n +n ## 按文件大小查找
-mindepth n ## 从n级子目录开始搜索
-maxdepth n ## 最多搜索到n级子目录
用find命令计算当前文件夹下的代码行数
简单介绍了find命令的使用,回归正题,如何用find命令计算指定文件夹下所有文件的代码行数呢?
基础版
find . -name "*[.php|.css|.js]"|xargs wc -l|grep "total"|awk '{print $1}'
find . -name "*[.php|.css|.js]"|xargs cat|wc -l
去空行版
find . -name "*[.php|.css|.js]"|xargs cat|grep -v ^$|wc -l
上面的^$
是正则表达式,^
是以匹配开头,$
是匹配结尾,所以^$
是匹配一个空行。
去注释版
find . -name "*[.php|.css|.js]"|xargs cat|grep -v -e ^$ -e ^\s*\/\/.*$|wc -l
上面的^\s*\/\/.*$
是正则表达式,其中^\s*
表明以空格(多个)开头,\/\/
表明是//
开头的注释,.*$
表明可能以.
结尾
去注释版只是去掉以//
开头的注释,对于以/* */
包含的注释并没有去掉。