计算 Linux 中某个目录中的文件数量
我假设您知道用于计算行数的 wc 命令。 我们可以使用相同的 wc 命令和ls 命令来计算目录中的文件数。
这个任务看似简单,但根据你的需求和对文件计数的定义,很快就会变得有点复杂。在我进一步让你困惑之前,让我们看看在 Linux 中计数文件数量的各种用例。
计算 Linux 目录中文件的数量
首先让我向您展示我将在本教程中使用的测试目录的内容:
abhishek@linux:~/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 个文件(包括一个隐藏文件)和该目录中的 2 个子目录。但您不必手动执行此操作。让我们使用 Linux 命令来计算文件数量。
计算文件和目录的数量(不包括隐藏文件)
您可以简单地运行 ls 和 wc 命令的组合,它将显示文件数量:
ls | wc -l
这是输出:
abhishek@linux:~/tutorials$ ls | wc -l
10
此命令存在问题。它统计当前目录中的所有文件和目录。但它看不到隐藏文件(名称以点开头的文件)。
这就是为什么上述命令显示文件数为 10 个而不是 11 个(9 个文件和 2 个目录)的原因。
计算文件和目录的数量(包括隐藏文件)
您可能已经知道ls 命令的 -a 选项会显示隐藏文件。但是如果您使用 ls -a 命令,它还会显示 .(当前目录)和 ..(父目录)。这就是为什么您需要使用 -A 选项来显示隐藏文件(不包括 . 和 .. 目录)。
ls -A | wc -l
这将为您提供当前目录中文件和目录的正确数量。查看显示数量为 11(9 个文件和 2 个目录)的输出:
abhishek@linux:~/tutorials$ ls -A | wc -l
11
您也可以使用此命令来实现相同的结果:
ls -1A | wc -l
请注意,使用的选项是 1(一)而不是 l(L)。使用 l(L)选项会在输出开头显示一个附加行(请参阅本文开头的目录输出中的“total 64”)。使用 1(一)每行列出一个内容,不包括附加行。这样可以得到更准确的结果。
计算文件和目录(包括子目录)的数量
到目前为止,您看到的只是当前目录中文件和目录的数量。它没有考虑子目录中的文件。
如果要统计所有子目录中的文件和目录的数量,可以使用tree命令。
tree -a
此命令显示目录结构,然后在输出底部显示摘要。
abhishek@linux:~/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)。
abhishek@linux:~/tutorials$ find . -type f | wc -l
20
仅计算文件,不计算目录,并且仅计算当前目录,不计算子目录
太棒了!但是,如果你想计算当前目录中的文件数量(不包括子目录中的文件),该怎么办?你可以使用与上面相同的命令,但略有不同。
您所要做的就是添加查找的“深度”。如果您将其设置为 1,它将不会进入子目录。
find . -maxdepth 1 -type f | wc -l
现在的输出如下:
abhishek@linux:~/tutorials$ find . -maxdepth 1 -type f | wc -l
9
到底…
在 Linux 中,您可以通过多种方式实现同一目标。我确信还有其他几种方法可以计算 Linux 中的文件数量。如果您使用其他命令,为什么不与我们分享呢?
我希望本 Linux 教程能帮助您学到一些东西。请继续关注以获取更多 Linux 技巧。