用于计算目录层次结构中文件的最快方法

时间:2014-01-19 12:15:07

标签: file shell filesystems

很简单,我想尽快获取目录(以及所有嵌套子目录)中的文件数。

我知道如何使用findwc -l配对和类似的方法来做到这一点,但是这些方法非常慢,它们会遍历每个目录中的每个文件条目并按照这种方式计算。

这是最快的方法,还是有替代方法?例如;我不需要找到特定类型的文件,所以我可以抓取符号链接,隐藏文件等。如果我可以通过计算所有内容而不需要进一步处理来更快地获得文件计数。

2 个答案:

答案 0 :(得分:1)

最快的方法是使用locate + wc或类似方法。它不会更快。该方法的主要不利之处在于它不是实际文件,而是在locate数据库中的文件。这个数据库可以在1天前完成。

所以这取决于你的任务:如果它容忍延迟,我宁愿locate

在我的超高速SSD机器上:

$ time find /usr | wc -l
156610

real    0m0.158s
user    0m0.076s
sys     0m0.072s

$ time locate /usr | wc -l
156612

real    0m0.079s
user    0m0.068s
sys     0m0.004s

在普通机器上,差异将大得多。

更新locate数据库的频率取决于主机的配置。 默认情况下,它每天更新(使用cron进行更新)。但是您可以配置系统,以便脚本每小时甚至是后续运行。当然,您可以不定期运行它,但可以按需运行(我感谢William Pursell的提示)。

答案 1 :(得分:0)

尝试使用此脚本作为替代方案:

find . -type d -exec bash -c 'd="{}"; arr=($d/*); echo "$d:${#arr[@]}"' \;

在我的快速基础测试中,它比wc -l

更快