查找与Linux中某个目录中的模式匹配的文件数

问题描述:

我是linux新手。我有一个目录在linux中约250,000个文件 我需要找到匹配模式的文件数量。查找与Linux中某个目录中的模式匹配的文件数

我尝试使用以下命令:

ls -1 20061101-20131101_kh5x7tte9n_2010_* | wc -l 

,我得到了以下错误消息:

-bash: /bin/ls: Argument list too long 
0 

请帮助。在此先感谢

这可能是最好使用find此:

find . -maxdepth 1 -name "20061101-20131101_kh5x7tte9n_2010_*" | wc -l 

find将返回符合条件的文件列表。 -maxdepth 1将使搜索只在路径中完成,没有子目录(thanks Petesh!)。

然后wc -l会指示行数。两个可能的选项


性能比较 - :

让我们创建这个模式10个000文件:

$ for i in {1..10000}; do touch 20061101-20131101_kh5x7tte9n_201_$i; done 

,然后比较它需要与ls -1 ...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快x5倍!但是如果我们用ls -1fthanks Petesh again!),然后ls是速度甚至比find

$ time ls -1f | grep 20061101-20131101_kh5x7tte9n_201 | wc -l 
10000 

real 0m0.023s 
user 0m0.020s 
sys  0m0.012s 
+2

为了防止递归到子目录中,您可以使用'-maxdepth 1'(如果它在该版本的查找中受支持) – Petesh

+0

好的,@Petesh,相应地更新,谢谢! – fedorqui

+2

ls在输出之前有排序的坏习惯,你应该用'ls -1 -f'来测试以获得与查找性能评估类似的行为 – Petesh

试试这个:

ls -1 | grep 20061101-20131101_kh5x7tte9n_2010_ | wc -l 

你有“说法太长时间”,因为外壳扩展了您的模式的列表文件。 尝试:

find -maxdepth 1 -name '20061101-20131101_kh5x7tte9n_2010_*' |wc -l 

请关注 - 模式是用引号括起来,以防止shell扩展

ls -1 | grep '20061101-20131101_kh5x7tte9n_2010_*' | wc -l 

以前的答案没有包括各地的搜索条件既不通配符*报价。

+0

这基本上是以前答案的重复,再加上它不起作用。 – blm