这篇文章总结下 Linux 下如何统计某个目录下面总共有多少个文件或文件夹。
1. 背景
平时在 Linux 下工作,我们可能经常会碰到这种场景,即需要统计某个目录下总共有多少个文件,或者多少个子文件夹。这时候,熟练的使用一些命令将会有助于你开展工作。
注:下问的命令需要有足够权限执行,否则碰到有些文件不能读取(权限不足)的情况,将会造成统计出错。
2. 使用 ls
和 wc
命令
ls
命令有一个参数是 -l
,表示列举出文件的详细信息:
1 | ubuntu@VM-0-14-ubuntu:~$ ls -l |
注意输出行的第一个字段,以 -rw-rw-r--
为例。从左往右数第一位,表示 文件类型 ,后面每 3 位是一组,分别表示 属主
、组用户
、其它用户
的权限,可以参考之前的博文:Linux学习记录:SUID 和 SGID 等特殊权限
下面解释下第一位(表示文件类型)的含义:
-
: 表示普通文件;d
: 表示目录;l
: 表示链接文件- ……
解释完 ls -l
命令后,我们还需要知道 wc
命令的使用方法。
wc
命令用来统计信息,如统计一个文件有多少行、有多少个字符等。常用的一个参数是 -l
,用来统计有多少行。
知道了这些以后,我们就能看懂下面的命令了。
① 统计一个文件夹下有多少个文件,不包括子文件夹里的。
1 | ls -l | grep "^-" | wc -l |
grep "^-"
表示抓取行首以字符 -
开头的行,其中 ^
表示从行首开始的第一个字符。
② 统计一个文件夹下有多少个文件夹,不包括子文件夹。
1 | ls -l | grep "^d" | wc -l |
grep "^d"
表示抓取行首以字符 d
开头的行。
③ 统计一个文件夹下有多少个文件,包括子文件夹里的。
1 | ls -lR | grep "^-" | wc -l |
其中 ls
命令的 -R
参数表示递归,即:会遍历左右的子文件夹。
④ 统计一个文件夹下有多少个文件夹,包括子文件夹
1 | ls -lR | grep "^d" | wc -l |
3. 使用 find
命令和 wc
命令
当然,要递归遍历所有的子文件夹的话,find
命令也是一个不错的选择,因为 find
在默认情况下(不加 -maxdepth
参数),是会遍历所有的子文件夹的。find
的使用方法可以参考之前的文章:Linux 学习记录: find 命令
下面来看使用方法。
1 | find . -type f | wc -l |
上述命令会遍历当前文件夹及其子文件夹,统计所有文件类型为 f
(普通文件)的个数。
同样道理,我们设置文件类型为 d
,就能统计所有子文件及的个数:
1 | find . -type d | wc -l |
当然,也可以只统计当前目录,不深入其子目录统计。
统计文件数:
1 | find . -maxdepth 1 -type f | wc -l |
统计目录数:
1 | find . -maxdepth 1 -type d | wc -l |