Не фундаментальное ускорение, но хоть что-то :)
find . -printf \\n | wc -l
Вам действительно не нужно передавать список имен файлов, достаточно только новых строк. Этот вариант примерно на 15% быстрее в моем Ubuntu 12.04.3, когда каталоги кэшируются в ОЗУ. Кроме того, этот вариант будет корректно работать с именами файлов, содержащими переводы строк.
Интересно, что этот вариант выглядит немного медленнее, чем приведенный выше:
find . -printf x | wc -c
Особый случай - но очень быстро
Если каталог находится в собственной файловой системе, вы можете просто посчитать inode:
df -i .
Если количество каталогов и файлов в других каталогах, отличных от подсчитанного, не сильно меняется, вы можете просто вычесть это известное число из текущего результата df -i
. Таким образом, вы сможете очень быстро считать файлы и каталоги.