在Linux目录中查找与模式匹配的文件数 [英] Find count of files matching a pattern in a directory in linux
问题描述
我是Linux新手.我在linux中有一个大约有25万个文件的目录 我需要找到与模式匹配的文件数.
I am new to linux. I have a directory in linux with approx 250,000 files I need to find count of number of files matching a pattern.
我尝试使用以下命令:
ls -1 20061101-20131101_kh5x7tte9n_2010_* | wc -l
我收到以下错误消息:
-bash: /bin/ls: Argument list too long
0
请帮助.预先感谢
推荐答案
为此最好使用find
:
find . -name "pattern_*" -printf '.' | wc -l
在您的特定情况下:
find . -maxdepth 1 -name "20061101-20131101_kh5x7tte9n_2010_*" -printf '.' | wc -m
find
将返回符合条件的文件列表. -maxdepth 1
将使搜索仅在路径中完成,没有子目录(
find
will return a list of files matching the criteria. -maxdepth 1
will make the search to be done just in the path, no subdirectories (thanks Petesh!). -printf '.'
will print a dot for every match, so that names with new lines won't make wc -m
break.
然后wc -m
将指示与文件数匹配的字符数.
Then wc -m
will indicate the number of characters which will match the number of files.
两个可能选项的性能比较:
Performance comparation of two possible options:
让我们用这种模式创建10000个文件:
Let's create 10 000 files with this pattern:
$ for i in {1..10000}; do touch 20061101-20131101_kh5x7tte9n_201_$i; done
,然后用ls -1 ...
或find ...
比较获得结果所需的时间:
And then compare the time it takes to get the result with ls -1 ...
or find ...
:
$ time find . -maxdepth 1 -name "20061101-20131101_kh5x7tte9n_201_*" | wc -l
10000
real 0m0.034s
user 0m0.017s
sys 0m0.021s
$ time ls -1 | grep 20061101-20131101_kh5x7tte9n_201 | wc -l
10000
real 0m0.254s
user 0m0.245s
sys 0m0.020s
find
is x5 times faster! But if we use ls -1f
(thanks Petesh again!), then ls
is even faster than find
:
$ time ls -1f | grep 20061101-20131101_kh5x7tte9n_201 | wc -l
10000
real 0m0.023s
user 0m0.020s
sys 0m0.012s
这篇关于在Linux目录中查找与模式匹配的文件数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!