Это может быть лучше использовать find
для этого:
find . -maxdepth 1 -name "20061101-20131101_kh5x7tte9n_2010_*" | wc -l
find
будет возвращать список файлов, удовлетворяющих критериям. -maxdepth 1
сделает поиск выполненным только по пути, не будет подкаталогов (thanks Petesh!).
Затем wc -l
укажет количество линий.
Производительность Comparation из двух возможных вариантов:
Давайте создадим 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
в 5 раз быстрее! Но если мы используем 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
Чтобы предотвратить рекурсию в подкаталоги, вы можете использовать '-maxdepth 1' (если он поддерживается в этой версии поиска) – Petesh
Хороший, @Petesh, просто обновленный соответственно, спасибо! – fedorqui
У ls есть плохая привычка сортировки перед выводом, вы должны проверить с помощью 'ls -1 -f', чтобы получить аналогичное поведение, как найти для оценки производительности. – Petesh