计算Linux中目录中的文件数

时间:2020-03-05 15:26:22  来源:igfitidea点击:

Linux中 wc命令用于计数行数。

我们可以使用与ls命令相同的wc命令来计算目录中的文件数。

该任务似乎很简单,但根据需求和计数文件的定义,很快可能会变得有些复杂。
在让我们进一步困惑之前,让我们看一下计算Linux中文件数量的各种用例。

计算Linux中目录中的文件数

首先让我向我们展示我将在本教程中使用的测试目录的内容:

Hyman@theitroad:~/tutorials$ls -la
total 64
drwxr-xr-x 4 igi igi 4096 Apr 29 17:53 .
drwxr-xr-x 55 igi igi 4096 Apr 29 15:50 ..
-rwxr–r– 1 igi igi 456 Mar 6 16:21 agatha.txt
-rw-r–r– 1 igi igi 0 Apr 16 19:53 .a.t
-rwxr–r– 1 igi igi 140 Mar 22 16:41 bash_script.sh
-rw-rw-r– 1 igi igi 95 Nov 11 13:12 cpluplus.cpp
-rw-r–r– 1 igi igi 1778 Apr 29 16:16 my_zip_folder.zip
drwxr-xr-x 4 igi igi 4096 Apr 19 19:07 newdir
-rw-r–r– 1 igi igi 163 Apr 13 15:07 prog.py
-rw-r–r– 1 igi igi 19183 Mar 18 18:46 services
-rw-r–r– 1 igi igi 356 Dec 11 21:35 sherlock.txt
-rwxrw-r– 1 igi igi 72 Jan 21 15:44 sleep.sh
drwxr-xr-x 3 igi igi 4096 Jan 4 20:10 target

我们会看到它在该目录中有9个文件(包括一个隐藏文件)和2个子目录。
但是我们不必手动进行。
让我们计算使用Linux命令的文件数。

计算文件和目录的数量(无隐藏文件)

我们可以简单地运行ls和wc命令的组合,它将显示文件数:

ls | wc -l

这是输出:

Hyman@theitroad:~/tutorials$ls | wc -l
10

此命令有问题。
它计算当前目录中的所有文件和目录。
但是看不到隐藏文件(名称以点开头的文件)。

这就是为什么上面的命令向我显示10个文件而不是11个文件(9个文件和2个目录)的原因。

计算文件和目录的数量,包括隐藏文件

我们可能已经知道ls命令的-a选项显示了隐藏文件。

但是,如果我们使用ls -a命令,它还会显示。
(当前目录)和..(父目录)。
这就是为什么我们需要使用-A选项来显示除以外的隐藏文件的原因。
和..目录。

ls -A | wc -l

这将为我们提供当前目录中文件和目录的正确计数。
看一下显示11个计数(9个文件和2个目录)的输出:

Hyman@theitroad:~/tutorials$ls -A | wc -l
11

我们还可以使用以下命令来达到相同的结果:

ls -1A | wc -l

请注意,它使用的选项是1(一)而非l(L)。
使用l(L)选项会在输出的开头显示另一行(请参阅本文开头的目录输出中的“总计64”)。
使用1(一)列出每行一个内容(不包括其他行)。
这给出了更准确的结果。

计算文件和目录的数量,包括子目录

到目前为止,我们所看到的只是当前目录中文件和目录的数量。
它没有考虑子目录中的文件。

如果要计算所有子目录中的文件和目录数,则可以使用tree命令。

tree -a

此命令显示目录结构,然后在输出的底部显示摘要。

Hyman@theitroad:~/tutorials$tree -a
.
├── agatha.txt
├── .a.t
├── bash_script.sh
├── cpluplus.cpp
├── my_zip_folder.zip
├── newdir
│   ├── new_dir
│   │   ├── c.xyz
│   │   ├── myzip1.zip
│   │   └── myzip2.zip
│   └── test_dir
│   ├── c.xyz
│   ├── myzip1.zip
│   └── myzip2.zip
├── prog.py
├── services
├── sherlock.txt
├── sleep.sh
└── target
├── agatha.txt
├── file1.txt
└── past
├── file1.txt
├── file2.txt
└── source1
└── source2
└── file1.txt
7 directories, 19 files

从输出中可以看到,它显示总共有7个目录和20个文件。
关于此结果的好处是,它不会在文件数中计算目录。

仅计算文件,不计算目录

到目前为止,我们看到的所有用于计数文件数量的解决方案都将目录考虑在内。
目录本质上是文件,但是如果我们只想计算文件数而不是目录怎么办?
我们可以使用美妙的find命令。

我们可以运行以下命令:

find . -type f | wc -l

上面的命令在当前目录及其子目录中搜索所有文件(类型f)。

Hyman@theitroad:~/tutorials$find . -type f | wc -l
20

仅计算文件,不计算目录,仅计算当前目录,不计算子目录

这很酷!但是,如果我们只想计算当前目录中的文件数(不包括子目录中的文件),该怎么办?
我们可以使用与上述相同的命令,但有细微差别。

我们所要做的就是添加发现的“深度”。
如果将其设置为1,则不会输入子目录。

find . -maxdepth 1 -type f | wc -l

现在是输出:

Hyman@theitroad:~/tutorials$find . -maxdepth 1 -type f | wc -l
9