如何统计文件或文件夹的数量

本文介绍了如何通过终端命令快速统计文件和文件夹的数量。包括如何统计当前目录下文件夹、文件、子文件夹和子文件的个数,以及如何递归统计特定类型文件(如go文件)的总行数。

点击个人博客,查看更多文章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.gocat tags_model.go
其效果是一样的,都会把文件中的内容输出到终端,进行显示。
所以wc -l ./models/tags_model.gowc -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/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值