快速获取与模式匹配的文件数量的方法

时间:2012-04-20 18:05:14

标签: unix filesystems ls

我目前有一个包含8K文件的目录。在接下来的一个月左右,这个数字将增长到100K以上。我需要能够计算匹配特定模式的目录中的文件。模式匹配会增加大量时间:

[XXXXXX@login-0-0 scripts]$ time ls | grep . -c
8373

real    0m0.115s
user    0m0.109s
sys 0m0.009s
[XXXXXX@login-0-0 scripts]$ time ls *.o* | grep . -c
6262

real    0m1.997s
user    0m0.121s
sys 0m0.270s

随着文件数量的不断增加,按模式计算的时间将变得太大。我可以解决这个问题吗?

作为旁注,文件系统是Lustre,我可以处理非便携式解决方案。

1 个答案:

答案 0 :(得分:6)

或许让你失望的是你的glob实际上是通过bash扩展的,参数传递给了ls,所以这是一些额外的工作。这对我有用:

user@host:~/junk$ time find . | wc -l
188318

real    0m0.202s
user    0m0.076s
sys 0m0.136s

user@host:~/junk$ time find . -name '*.o' | wc -l
374

real    0m0.243s
user    0m0.160s
sys 0m0.080s

速度差别不大。请注意,这是递归的,但如果不需要,可以设置maxdepth。

也许是时候清理一些垃圾......