fedorqui..
45
使用它可能更好find:
find . -name "pattern_*" -printf '.' | wc -l
在您的具体情况:
find . -maxdepth 1 -name "20061101-20131101_kh5x7tte9n_2010_*" -printf '.' | wc -m
find将返回符合条件的文件列表.-maxdepth 1将使搜索只在路径中完成,没有子目录(感谢Petesh!).-printf '.'将为每个匹配打印一个点,以便具有新行的名称不会wc -m中断.
然后wc -m会指出行数.
性能比较两种可能的选择:
让我们用这种模式创建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(再次感谢Petesh!),那么ls甚至比find:
$ time ls -1f | grep 20061101-20131101_kh5x7tte9n_201 | wc -l
10000
real 0m0.023s
user 0m0.020s
sys 0m0.012s
为了防止递归到子目录,你可以使用`-maxdepth 1`(如果在那个版本的find中支持它) (2认同)
ls在输出之前有排序的坏习惯,你应该用`ls -1 -f`进行测试,以获得与性能评估相似的行为 (2认同)