Linux 学习记录:统计文件和目录的个数

这篇文章总结下 Linux 下如何统计某个目录下面总共有多少个文件或文件夹。

1. 背景

平时在 Linux 下工作,我们可能经常会碰到这种场景,即需要统计某个目录下总共有多少个文件,或者多少个子文件夹。这时候,熟练的使用一些命令将会有助于你开展工作。

注:下问的命令需要有足够权限执行,否则碰到有些文件不能读取(权限不足)的情况,将会造成统计出错。

2. 使用 lswc 命令

ls 命令有一个参数是 -l ,表示列举出文件的详细信息:

1
2
3
4
5
ubuntu@VM-0-14-ubuntu:~$ ls -l
total 1825244
-rw-rw-r-- 1 ubuntu ubuntu 237412642 Mar 31 11:47 3-24.mp4
-rw-rw-r-- 1 ubuntu ubuntu 242636679 Mar 24 11:41 3-31.mp4
-rw-rw-r-- 1 ubuntu ubuntu 64569543 Apr 14 10:16 4-14-1.mp4

注意输出行的第一个字段,以 -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

4. References

Donate comment here