点击个人博客,查看更多文章http://elonjelinek.github.io/
要统计文件的数量或文件夹的数量,最简单的方式就是打开终端,一行命令直接搞定,简单粗暴。
文件夹与文件个数
统计当前目录下的文件夹数量:ls -l | grep "^d" | wc -l
统计当前目录下的文件数量:ls -l | grep "^-" | wc -l
递归统计当前目录下子文件夹数量:ls -lR | grep "^d" | wc -l
递归统计当前目录下子文件数量:ls -lR | grep "^-" | wc -l
sszxr:src sszxr$ ls -l | grep "^d" | wc -l
44
sszxr:src sszxr$ ls -l | grep "^-" | wc -l
22
sszxr:src sszxr$ ls -lR | grep ^- | wc -l
5655
sszxr:src sszxr$ ls -lR | grep ^d | wc -l
701
sszxr:src sszxr$
这里grep后面可以加双引号,也可以加单引号,也可不加引号。
ls -l的输出结果如下
total 28712
-rw-r--r--@ 1 sszxr staff 13749388 10 9 19:00 blogweb
drwxr-xr-x 3 sszxr staff 96 10 9 18:52 conf
drwxr-xr-x 14 sszxr staff 448 10 9 18:53 controllers
-rw-r--r--@ 1 sszxr staff 186 10 9 18:53 main.go
drwxr-xr-x 7 sszxr staff 224 10 9 18:53 models
drwxr-xr-x 3 sszxr staff 96 10 9 18:53 routers
drwxr-xr-x 7 sszxr staff 224 10 9 18:53 static
以d开头的即dictionary,就是文件夹;以横杠-开头的,就是文件。
^d表示行首第一个字符是d,^-表示行首第一个字符是-,不加^统计结果是乱的,也就是只要碰到-就会统计,而^-表示只有-在行首,才进行统计
sszxr:blogweb sszxr$ ls -l | grep ^-
-rw-r--r--@ 1 sszxr staff 13749388 10 9 19:00 blogweb
-rw-r--r--@ 1 sszxr staff 186 10 9 18:53 main.go
sszxr sszxr$ ls -l | grep - | wc -l
11
sszxr:blogweb sszxr$
sszxr sszxr$ ls -l | grep ^- | wc -l
2
sszxr:blogweb sszxr$
第一次统计了11个-,而第二次只统计了2个。
统计文件行数
例如当前文件夹下有个名为src.txt的文本文件,统计该文件里面共有多少行。
sszxr:Desktop sszxr$ sed -n '$=' src.txt
66
sszxr:Desktop sszxr$ cat src.txt | wc -l
66
sszxr:Desktop sszxr$ awk 'END{print NR}' src.txt
66
sszxr:Desktop sszxr$ wc -l src.txt
66 src.txt
sszxr:Desktop sszxr$
递归统计当前文件夹下所有go文件的总行数
即统计当前文件夹下所有go文件总共有多少行代码。
find . -name '*.go'会递归列出当前文件夹下所有go文件的名称,输出格式如下
./models/tags_model.go
./models/home_model.go
./models/article_model.go
这种格式是可以当文件名来操作的,例如
cat ./models/tags_model.go和cat tags_model.go
其效果是一样的,都会把文件中的内容输出到终端,进行显示。
所以wc -l ./models/tags_model.go和wc -l tags_model.go
效果是一样的,表示统计该文件内容的行数。
sszxr:blog sszxr$ wc -l `find . -name '*.go'`
10 ./gocode/userinfo.go
11 ./gocode/publish.go
99 ./main.go
35 ./sql/querydata.go
41 ./sql/datasave.go
196 total
sszxr:blog sszxr$
// 只打印最后一行
sszxr:blog sszxr$ wc -l `find . -name '*.go'` | grep 'total'
196 total
sszxr:blog sszxr$
sszxr:blog sszxr$ wc -l `find . -name '*.go'` | grep 'total' | awk '{print $1}'
196
sszxr:blog sszxr$
// 第二种方法
sszxr:blog sszxr$ find . -name '*.go' | xargs wc -l | grep 'total' | awk '{print $1}'
196
sszxr:blog sszxr$
//统计不包含空格的行
sszxr:blog sszxr$ find . -name '*.go' | xargs cat | grep -v ^$|wc -l
164
sszxr:blog sszxr$
grep搜索命令中-v表示取反,^$表示匹配空白行。
xargs cat表示一次性打开所有文件。
点击个人博客,查看更多文章http://elonjelinek.github.io/
本文介绍了如何通过终端命令快速统计文件和文件夹的数量。包括如何统计当前目录下文件夹、文件、子文件夹和子文件的个数,以及如何递归统计特定类型文件(如go文件)的总行数。
824

被折叠的 条评论
为什么被折叠?



