linux ls 统计文件及文件夹数量,以及统计文件夹的大小

ls命令的参数,以及如何统计某个文件大小,统计某个目录的大小

在 linux 中,显示文件的命令为 ls,ls有很多参数,来讲几个常用的。

-a 显示所有文件,包括隐藏文件,以 . 开头的为隐藏文件

-l 显示文件的详细信息,包括,文件类型、权限、文件的属主及属组、文件大小、修改时间,下面来看一个例子

ainy@DESKTOP-8DHJ665:~$ ls -l
total 613484
drwxrwxr-x 2 ainy ainy 0 Aug 25 14:14 linux-3.12.61
-rwxrwxrwx 1 ainy ainy 545024000 Aug 25 11:56 linux-3.12.61.tar
-rw-rw-rw- 1 ainy ainy 80646032 Aug 23 21:26 linux-3.16.37.tar.xz
drwxr-xr-x 2 ainy ainy 0 Aug 25 18:50 nginx-1.10.1
-rw-rw-rw- 1 ainy ainy 909077 Jun 1 00:38 nginx-1.10.1.tar.gz
drwxr-xr-x 2 ainy ainy 0 Aug 25 18:50 pcre-8.38
-rw-rw-rw- 1 ainy ainy 1562265 Aug 25 14:36 pcre-8.38.tar.bz2
drwxrwxrwx 2 ainy ainy 0 Aug 27 11:37 R
ainy@DESKTOP-8DHJ665:~$

其中,第一列,表示了文件的类型以及文件权限,第一例的第一个字母,代表的是文件类型,d 表示是目录,- 表示是文件,l表示是链接文件,坚着后面的9个字母,表示的是文件权限,这个我会在后面继续更新。

第二例,是一个数字,如果是文件的话,自然就是 1 了,若是目录,则是该目录下的文件个数了

第三例,表示文件的属主,表示的是该文件的所有者

第四例,表示文件的属组

第五例,文件的大小,单位为 字节,(至为文件夹的大小为什么为0,这是因为没有统计该文件以下的文件)

第六例,第七例,第八例,第表示文件的创建日志,是 月 日 时间,如:Aug 25 11:56 表示的是 8月25日11点56分创建的文件

第九例,就是文件名,及目录名称了

-F  在目录后面添加 / ,在有执行权限的文件上添加一个 * 号

ainy@DESKTOP-8DHJ665:~$ ls -lF
total 613488
drwxrwxr-x 2 ainy ainy 0 Aug 25 14:14 linux-3.12.61/
-rwxrwxrwx 1 ainy ainy 545024000 Aug 25 11:56 linux-3.12.61.tar*
-rw-rw-rw- 1 ainy ainy 80646032 Aug 23 21:26 linux-3.16.37.tar.xz
drwxr-xr-x 2 ainy ainy 0 Aug 25 18:50 nginx-1.10.1/
-rw-rw-rw- 1 ainy ainy 909077 Jun 1 00:38 nginx-1.10.1.tar.gz
drwxr-xr-x 2 ainy ainy 0 Aug 25 18:50 pcre-8.38/
-rw-rw-rw- 1 ainy ainy 1562265 Aug 25 14:36 pcre-8.38.tar.bz2
drwxrwxrwx 2 ainy ainy 0 Aug 27 12:01 R/
ainy@DESKTOP-8DHJ665:~$

-d 则显示文件的信息,不显示该目录下的文件信息,一般和 -l 结合一起使用

ainy@DESKTOP-8DHJ665:~$ ls -ld linux-3.12.61
drwxrwxr-x 2 ainy ainy 0 Aug 25 14:14 linux-3.12.61
ainy@DESKTOP-8DHJ665:~$

-h 将文个的大小自动换算为 KB 或 MB 或GB,一般也是 -l 一起使用,因为 -l 显示文件的大小信息

ainy@DESKTOP-8DHJ665:~$ ls -lh
total 600M
drwxrwxr-x 2 ainy ainy 0 Aug 25 14:14 linux-3.12.61
-rwxrwxrwx 1 ainy ainy 520M Aug 25 11:56 linux-3.12.61.tar
-rw-rw-rw- 1 ainy ainy 77M Aug 23 21:26 linux-3.16.37.tar.xz
drwxr-xr-x 2 ainy ainy 0 Aug 25 18:50 nginx-1.10.1
-rw-rw-rw- 1 ainy ainy 888K Jun 1 00:38 nginx-1.10.1.tar.gz
drwxr-xr-x 2 ainy ainy 0 Aug 25 18:50 pcre-8.38
-rw-rw-rw- 1 ainy ainy 1.5M Aug 25 14:36 pcre-8.38.tar.bz2
drwxrwxrwx 2 ainy ainy 0 Aug 27 12:01 R
ainy@DESKTOP-8DHJ665:~$

-R 递归显示,即是显示该下的所有文件及文件夹

好了,几个 ls 的参数讲完了,我们来统计一下文件或者文件夹的个数吧

其实统计文件数量,或者文件夹数量,也就是用到了 ls 的递归显示,以及详细信息显示,为什么用详细信息显示呢,因为我们在后面要用 wc 去统计个数,而 -l 的详细信息,一行只输出一个文件或文件夹。

统计文件个数:

ainy@DESKTOP-8DHJ665:~$ pwd
/home/ainy
ainy@DESKTOP-8DHJ665:~$ ls -lR linux-3.12.61 | grep "^d" | wc -l
3550
ainy@DESKTOP-8DHJ665:~$

在这里,先用了递归显示所有文件,然后使用 grep 过滤,过滤以 d 开头的,也就是只显示文件夹,然后再使用 wc -l 统计有多少行,也就是计算出来了,有多少个目录

统计文件个数:

ainy@DESKTOP-8DHJ665:~$ ls -lR linux-3.12.61 | grep "^-" | wc -l
48426
ainy@DESKTOP-8DHJ665:~$

这条命令和上一条命令一样,区别就是过滤显示的那一块不一样,因为前我们介绍过,ls -l 显示文件的详细信息, – 开头的代表是文件

统计文件的大小,使用 du 命令,这个命令与 du 命令还是有些区别的,这个我在后面也会讲到,这里简单的介绍一下 du 命令的统计大小。

du 直接执行,是统计了当前目录下的所有文件,以及当前目录下所有目录的子目录,以及子文件,所以一般统计的时候,也需要指定。

默认情况下,du 命令显示的大小单位为字节,可以使用 -h 参数,使显示单位为 K M G ,以便提高可读性。

ainy@DESKTOP-8DHJ665:~$ du linux-3.12.61.tar pcre-8.38.tar.bz2 nginx-1.10.1.tar.gz
532252 linux-3.12.61.tar
1528 pcre-8.38.tar.bz2
888 nginx-1.10.1.tar.gz
ainy@DESKTOP-8DHJ665:~$

再加上 -h 显示是这样的:

ainy@DESKTOP-8DHJ665:~$ du -h linux-3.12.61.tar pcre-8.38.tar.bz2 nginx-1.10.1.tar.gz
520M linux-3.12.61.tar
1.5M pcre-8.38.tar.bz2
888K nginx-1.10.1.tar.gz
ainy@DESKTOP-8DHJ665:~$

统计整个目录的大小,包括里面的所有文件,显示总大小,不显示单个文件的大小

ainy@DESKTOP-8DHJ665:~$ du -sh linux-3.12.61
862M linux-3.12.61
ainy@DESKTOP-8DHJ665:~$

若要显示目录中每个文件的大小,则直接执行如下命令

du -h linux-3.12.61

 

猜您喜欢