计算目录(包括子目录)中文件数的最快方法

时间:2015-06-04 19:28:40

标签: linux performance

我正在运行一个脚本来查看目录及其子目录中的所有文件。

该脚本已经运行了一天,我想估计它将继续运行多长时间。我知道到目前为止它处理了多少文件(73,000,000),但我不知道文件总数。

计算文件的最快方法是什么?

我尝试右键单击目录并选择“属性”,然后慢慢计数。 我尝试将ls重定向到一个文件,它只是搅拌和放大搅动...

我应该用c编写程序吗?

3 个答案:

答案 0 :(得分:6)

最简单的方法:

find <dir> -type f | wc -l

稍微快点,或许:

find <dir> -type f -printf '\n' | wc -l

答案 1 :(得分:5)

我做了一个快速的研究。使用包含100,000个文件的目录,我比较了以下命令:

ls -R <dir>
ls -lR <dir>
find <dir> -type f

我跑了两次,一次重定向到一个文件(>file),然后输入wc(|wc -l)。以下是以秒为单位的运行时间:

        >file   |wc
ls -R     14     14
find      89     56
ls -lR    91     82

>file|wc -l之间的差异小于lsfind之间的差异。

似乎ls -R至少 4x find快。

答案 2 :(得分:1)

我知道的最快:

ls | wc -l

注意:请记住,它列出了目录中的所有节点,包括子目录以及对当前和父目录的两个引用(.&amp; {{1} })。

如果您需要所有子目录中的文件的递归计数(而不是当前目录中包含子目录的所有内容),那么您可以将“递归”标志添加到..命令:

ls

如果你将速度与使用ls -R | wc -l 的建议进行比较,你会发现它更快(因子2到10),但请记住上面的注释。