Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unix 获取与模式匹配的文件数的快速方法_Unix_Filesystems_Ls - Fatal编程技术网

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

Unix 获取与模式匹配的文件数的快速方法,unix,filesystems,ls,Unix,Filesystems,Ls,我有一个目录,目前有8K个文件。在接下来的一个月左右,这个数字将增长到10多万。我需要能够计算目录中与特定模式匹配的文件。模式匹配增加了大量的时间: [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.997

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

[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
随着文件数量的不断增加,按模式计数的时间将变得太长。我能绕开这个吗


顺便说一句,文件系统很有光泽,我可以处理一个不可移植的解决方案。

也许让您慢下来的是,您的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,可以设置maxdepth


也许是我清理一些垃圾的时候了…

如果一个文件的名称中有换行符,它可能会被算作两个或更多的文件。我会这样做:
find-maxdepth 1-名称'*.o'-printf“\n”| wc-l
。(在这种情况下,
-name'*.o'
会阻止
计数,但在其他情况下,您可能还需要
-mindepth 1
来排除