我想您知道用于计算行数的 wc 命令。 我们可以使用与 ls 命令相同的 wc 命令来计算目录中的文件数。
这项任务看起来很简单,但根据您的需要和计数文件的定义,很快就会变得稍微复杂。 在我进一步混淆你之前,让我们看看在 Linux 中计算文件数量的各种用例。
计算Linux中目录中的文件数
首先让我向您展示我将在本教程中使用的测试目录的内容:
[email protected]:~/tutorials$ ls -la
total 64
drwxr-xr-x 4 abhishek abhishek 4096 Apr 29 17:53 .
drwxr-xr-x 55 abhishek abhishek 4096 Apr 29 15:50 ..
-rwxr–r– 1 abhishek abhishek 456 Mar 6 16:21 agatha.txt
-rw-r–r– 1 abhishek abhishek 0 Apr 16 19:53 .a.t
-rwxr–r– 1 abhishek abhishek 140 Mar 22 16:41 bash_script.sh
-rw-rw-r– 1 abhishek abhishek 95 Feb 11 13:12 cpluplus.cpp
-rw-r–r– 1 abhishek abhishek 1778 Apr 29 16:16 my_zip_folder.zip
drwxr-xr-x 4 abhishek abhishek 4096 Apr 19 19:07 newdir
-rw-r–r– 1 abhishek abhishek 163 Apr 13 15:07 prog.py
-rw-r–r– 1 abhishek abhishek 19183 Mar 18 18:46 services
-rw-r–r– 1 abhishek abhishek 356 Dec 11 21:35 sherlock.txt
-rwxrw-r– 1 abhishek abhishek 72 Jan 21 15:44 sleep.sh
drwxr-xr-x 3 abhishek abhishek 4096 Jan 4 20:10 target
可以看到该目录下有 9 个文件(包括 1 个隐藏文件)和 2 个子目录。 但是您不必手动执行此操作。 让我们使用 Linux 命令计算文件的数量。
计算文件和目录的数量(没有隐藏文件)
您可以简单地运行 ls 和 wc 命令的组合,它将显示文件数:
ls | wc -l
这是输出:
[email protected]:~/tutorials$ ls | wc -l
10
这个命令有问题。 它计算当前目录中的所有文件和目录。 但它看不到隐藏文件(名称以点开头的文件)。
这就是为什么上面的命令显示了 10 个文件而不是 11 个(9 个文件和 2 个目录)的原因。
计算文件和目录的数量,包括隐藏文件
您可能已经知道 ls 命令的 -a 选项显示隐藏文件。 但是如果你使用 ls -a 命令,它也会显示 . (当前目录)和 ..(父目录)。 这就是为什么您需要使用 -A 选项来显示除 . 和 .. 目录。
ls -A | wc -l
这将为您提供当前目录中文件和目录的正确计数。 查看显示计数为 11(9 个文件和 2 个目录)的输出:
[email protected]:~/tutorials$ ls -A | wc -l
11
您也可以使用此命令来实现相同的结果:
ls -1A | wc -l
请注意,使用的选项是 1(一)而不是 l(L)。 使用 l (L) 选项会在输出的开头显示额外的一行(参见文章开头目录输出中的“total 64”)。 使用 1(一)列出每行一个内容,不包括附加行。 这给出了更准确的结果。
计算文件和目录的数量,包括子目录
到目前为止,您看到的只是当前目录中的文件和目录的数量。 它不考虑文件中的 子目录.
如果要统计所有子目录中文件和目录的数量,可以使用tree命令。
tree -a
此命令显示目录结构,然后在输出底部显示摘要。
[email protected]:~/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 . -type f | wc -l
上述命令搜索当前目录及其子目录中的所有文件(类型 f)。
[email protected]:~/tutorials$ find . -type f | wc -l
20
只计算文件,不计算目录,只计算当前目录,不计算子目录
这很酷! 但是,如果您只想计算当前目录中的文件数,不包括子目录中的文件,该怎么办? 您可以使用与上述相同的命令,但略有不同。
您所要做的就是添加您的发现的“深度”。 如果设置为 1,则不会进入子目录。
find . -maxdepth 1 -type f | wc -l
这是现在的输出:
[email protected]:~/tutorials$ find . -maxdepth 1 -type f | wc -l
9
到底…
在 Linux 中,您可以有多种方法来实现相同的目标。 我很确定还有其他几种方法可以计算 Linux 中的文件数。 如果您使用其他命令,为什么不与我们分享呢?
我希望这个 Linux 教程能帮助你学到一些东西。 保持联系以获取更多 Linux 技巧。