shell统计代码行数

写了一堆代码,那么,如何知道自己的代码量呢?下面是通过一行shell命令来统计某个目录下或某个源文件中代码的行数。

第一版本

find /home/yang/libnids-1.24/ -name *.c -or -name *.h -or -name *.cpp | xargs cat | wc -l

该版本统计目录“/home/yang/libnids-1.24”目录下的所有源文件(后缀名为c、cpp、h)中所有的行数,包括空行、和注释。

第二版本

find /home/yang/libnids-1.24/ -name *.c -or -name *.h -or -name *.cpp | xargs cat | grep -v ^$ | wc -l
这个版本添加了grep命令来去除空行:^$匹配空行,grep -v匹配与正则表达式相反的内容,这两者组合就可以去除空行。

第三版本

find /home/yang/libnids-1.24/ -name *.c -or -name *.h -or -name *.cpp | xargs cat | grep -v -e ^$ -e ^\s*\/\/.*$ | wc -l
该版本在第二版本基础上又过滤了以“//”开头的注释。因为“//”形式的注释可能不是在一行的最开始,在“//”的前边可能有一个或多个空格,因此\s*过滤空格。

xargs命令

xargs是给命令传递参数的一个过滤器,也是组合多个命令的一个工具。它把一个数据流分割为一些足够小的块,以方便过滤器和命令进行处理。通常情况下,xargs从管道或者stdin中读取数据,但是它也能够从文件的输出中读取数据。xargs的默认命令是echo,这意味着通过管道传递给xargs的输入将会包含换行和空白,不过通过xargs的处理,换行和空白将被空格取代。


1. 当你尝试用rm 删除太多的文件,你可能得到一个错误信息:/bin/rm Argument list too long. 用xargs 去避免这个问题

find ~ -name ‘*.log’ -print0 | xargs -0 rm -f


2. 获得/etc/ 下所有*.c 结尾的文件列表,有几种不同的方法能得到相同的结果,下面的例子仅仅是示范怎么实用xargs ,在这个例子中实用 xargs将find 命令的输出传递给ls -l

# find /etc -name "*.c" | xargs ls –l


3. 假如你有一个文件包含了很多你希望下载的URL, 你能够使用xargs 下载所有链接

# cat list.txt | xargs wget –c


4. 查找所有的jpg 文件,并且压缩它

# find / -name *.jpg -type f -print | xargs tar -cvzf images.tar.gz

你可能感兴趣的:(Linux,工具使用设置)