Linux 统计目录中的文件数

ls -l 列出文件时,列表最开始权限值的部分,以 - 开始的代表是文件,以 d 开始的代表是文件夹。(该命令列出的是当前文件夹中的文件)

$ ls -l
total 8976648
-rw-rw-rw-@  1 herald  staff    80683809  5 11 09:34 Slack-4.16.2-macOS.dmg
-rw-r--r--@  1 herald  staff    10497550  5 11 00:10 Typora.dmg
-rw-r--r--@  1 herald  staff     1705439  5 21 16:09 ZeroTier One.pkg
-rw-r--r--@  1 herald  staff    14424026  5 21 13:23 hugo_0.83.1_macOS-64bit.tar.gz
drwx------@  6 herald  staff         192  5 25 10:30 juicefs-0.13.0-darwin-amd64
-rw-r--r--@  1 herald  staff    22643926  5 25 10:29 juicefs-0.13.0-darwin-amd64.tar.gz

要让列表只显示文件,可以使用 grep "^-" 过滤结果:

$ ls -l | grep "^-"
total 8976648
-rw-rw-rw-@  1 herald  staff    80683809  5 11 09:34 Slack-4.16.2-macOS.dmg
-rw-r--r--@  1 herald  staff    10497550  5 11 00:10 Typora.dmg
-rw-r--r--@  1 herald  staff     1705439  5 21 16:09 ZeroTier One.pkg
-rw-r--r--@  1 herald  staff    14424026  5 21 13:23 hugo_0.83.1_macOS-64bit.tar.gz
-rw-r--r--@  1 herald  staff    22643926  5 25 10:29 juicefs-0.13.0-darwin-amd64.tar.gz

然后可以利用 wc -l 命令对过滤后的结果进行数量统计:

$ ls -l | grep "^-" | wc -l
     5

如果想递归统计当前文件夹下面的文件数量(即包含子文件夹中的文件),可以使用 ls -lR 列出文件,然后再进行过滤和数量统计:

$ ls -lR | grep "^-" | wc -l
     124

类似的,如果想统计文件夹的数量,则可以使用 grep "^d" 进行结果过滤:

$ ls -l | grep "^d"
drwx------@  6 herald  staff         192  5 25 10:30 juicefs-0.13.0-darwin-amd64

$ ls -l | grep "^d" | wc -l
     1
    
$ ls -lR | grep "^d" | wc -l
     14