查找与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 -1f
(thanks Petesh again!),然后ls
是速度甚至比find
:
$ time ls -1f | grep 20061101-20131101_kh5x7tte9n_201 | wc -l
10000
real 0m0.023s
user 0m0.020s
sys 0m0.012s
答
试试这个:
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
为了防止递归到子目录中,您可以使用'-maxdepth 1'(如果它在该版本的查找中受支持) – Petesh
好的,@Petesh,相应地更新,谢谢! – fedorqui
ls在输出之前有排序的坏习惯,你应该用'ls -1 -f'来测试以获得与查找性能评估类似的行为 – Petesh