计算Linux中目录中的文件数
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