最近写简历, 想算下自己的这个项目一共有多少行代码, 好方便在简历上展示. 本来想着一直用git管理代码, 顺便统计下好了. 结果竟然没有在git中找到单独统计行数的工具, 太出乎我意料了. 最近用Cmder挺方便, 就想用shell统计下代码行数, 应该就是一两个命令的事.
用Java, Python肯定可以实现, 但是感觉太重, 我只是想随便查查我的代码一共有多少行, 3秒钟就可以搞定的那种, 不想辛辛苦苦的写foreach循环, 递归调用, 然后可能还有各种边界条件要考虑.
嗯, 谷歌了好久, 我本来以为是用grep命令, 没想到是find命令, 当然用grep肯定也可以实现. 命令如下:
find . -name "*.cs" | xargs wc -l
逐一解释一下:
- find : linux的查找命令, 查找符合条件的文件. 这里-name跟着”*.cs”, 就是表示所有以cs结尾的文件. -iname是大小写不敏感的, 比如-iname “*.cs”就是匹配所有以”*.cs”,”*.Cs”,”*.cS”,”*.CS”结尾的文件.
- . : “.”在这里表示当前目录, 比如想要执行当前目录的某个文件, 就可以用”./executefile”.
- | : 管道符号,表示把前面找到结果传到下一个命令.
- xargs : 如果find找到的结果数目太大,可能会产生错误,错误信息通常是”参数列太长”或”参数列溢出”. xargs命令每次只获取一部分文件而不是全部. 但是这里还有些不同,我的文件较小,不会出现溢出情况,就试了下find . -name “*.cs” | wc -l, 但是这次传出的结果是42,是一共有多少文件以”*.cs”结尾, 这就让我有点搞不懂了. 谷歌了一下, 没有查出让我信服的结果, 先放在这, 等我以后填. [仔细查了一下资料,这里其实就是”管道和xargs的区别, 管道是实现: 将前面的标准输出作为后面的标准输入. xargs是实现: 将标准输入作为命令的参数”. 详细见这篇文章.]
- wc -l : 打印指定文件的文本行数。l是小写的L.
结果图如下所示, 还是挺人性化的, 每个文件有多少行都很清楚.
其实, 我最想说的是, 我一直以为这个项目代码量有十万行了呢, 要不然怎么会那么难管理. 结果还不到一万五. 额,这让我对大代码管理的难度有了更大体会.
更让我惊讶的是, 还有个github项目CLOC, Count Lines of Code. 真是醉了醉了, 果然是懒人改变世界. 这下只用一个命令就可以了.