在平时使用 Linux 系统的时候,常常有这么一个需求,就是需要统计一下某个目录下的文件个数。在 Windows 下大家都知道当你打开一个文件夹时,它会在对话框的左下角显示项目各位,一个文件夹或者一个文件都可以称之为一个项目。而 Linux 下没有这么一说,那么如果我们在 Linux 下想要知道某个目录下的文件数需要怎么统计呢?这个问题其实没有哪个命令直接可以给到结果,而是需要几个命令的组合实现。具体命令如下:
$ ls -l /etc/ | grep "^-" | wc -l
这里我们是以统计 /etc
目录下的文件总数为例。这个组合命令是由很多单独的命令组成的,相信大家分开来看的话每一个命令都很熟悉,但是合一块可能不太理解它的意思。那么下面就来具体说一下这个命令的含义。
首先 ls
这个命令想必大家都认识,这是一个很基础的命令,平时使用频度是很高的。ls
命令的它是英文单词 list
的缩写,就是列表的意思。所以当在命令行键入这个命令的时候,会将当前目录下所有的子目录跟文件都名都打印出来。上面示例中 ls
后面还加了一个 -l
选项,-l
作用是以长格式列出这些文件或者目录。我们可以来对比看下加与不加 -l
的区别:
上面我们先是临时创建了三个文件,使用 ls
的时候只是将这三个文件名字列了出来,加上 -l
选项可以看到这三个文件的一些属性,另外大家需要知道的一点就是 ll
这个命令跟 ls -l
是一样的,因为在系统环境变量中有设置命令别名。所以上面组合命令中第一个命令 ls -l /etc
的输出就是将 /etc
这个目录下的所有文件和子目录权目列出来。
说完了第一个命令,接下来就是 |
这个特殊的符号了,其实这个符号也是一个命令,叫做 “管道符” ,也是一个使用频度很高的命令。管道符的作用就是将上一个命令的输出作为后面一个命令的输入,说到这里,是不是大概明白了这个命令的意思了。我们结合上面前两个命令 ls -l /etc/ | grep "^-"
来看,就是将 /etc
目录下的所有文件和子目录的输出来传到第二个命令,然后第二个命令做筛查的前提就是以第一个命令的输出来做筛查的。我们先来看看这两个命令的输出结果:
$ ls -l /etc/ | grep "^-"
好像这个命令的输出没有什么特别的地方,但是大家仔细看,/etc
目录下正常来将是有一些子目录,但是这里的输出却没有子目录。所以这也就是使用 grep
的原因,这个命令一般用来做筛查的时候很方便,此处就是筛选出了以 “-” 开头的行,因为我们的目的是统计目录下文件的数量,我们还知道,在 Linux 系统中以 “-” 开头的就表示文件。而 “^” 的作用就是以什么开头,它后面跟着 “-” 就表示以 “-” 开头的行,说到这里,大家应该对前两个命令很熟悉了吧。
接着就是组合命令中的最后一个命令了,wc
命令,这个命令的意思如下图所展现出来的就是打印文件的行数、单词数或者字节数。所以用这个命令来统计文件数最好不过了。
知道了 wc
命令的作用,那么结合最后两个命令一块来分析它的意思。grep "^-" | wc -l
在这个命令中,首先 grep
已经筛选了除了目录下的所有文件,而这些文件的输出方式都是一行一个,也就表示一行表示一个文件,那么如果需要统计文件的个数,直接统计行数其实就可以达到目的了。所以这里要介绍一下 -l
这个选项的意思,这个选项可以理解为 lines,即行数的英文单词,因此使用 wc -l
这个命令配合选项就可以达到统计文件数的效果。我们来看它的输出:
$ ls -l /etc/ | grep "^-" | wc -l
所以就表示 /etc
目录下有 105 个文件。本文的介绍到此结束,这个统计的命令还是挺常用的,感兴趣的朋友可以自己仿照一下统计别的目录下文件试试。