Первое решение (что называется «в лоб») для подсчета количества файлов в linux директории:
$ ls -f . | wc -l
Недостатки: будет выведено общее количество записей в текущей директории с учетом всех подпапок, включая текущую (.) и верхнюю (..), что, на мой взгляд, не верно. К тому же, при очень большом количестве, когда не срабатывает ls, эта команда, естественно, тоже не даст результата.
Более правильное решение:
$ find . -type f -maxdepth 1 | wc -l
В этом случае будет выведено количество только файлов и только в текущей директории без учета вложенных. Соответственно, можно модифицировать данную команду для подсчета файлов на данном уровне и во всех вложенных папках следующего уровня:
$ find . -type f -maxdepth 2 | wc -l
Если же нужно подсчитать только все файлы в папке с учетом всех подпапок всех уровней вложенности (например, некоторые провайдеры хостинга вводят ограничение по количеству файлов на бесплатных или дешевых тарифах), то следует выполнить:
$ find . -type f | wc -l
Посчитать общее количество всех файлы и папок с учетом вложенных директорий рекурсивно:
$ find . | wc -l
Рекурсивно посчитать количество только вложенных папок в текущей директории и всех поддиректориях можно следующим образом:
$ find . -type d | wc -l
И наконец, если надо посчитать количество файлов определенного типа (например, фото товаров в интернет магазине):
$ find . -type f -name "*.jpg" | wc -l
В случае, если вы действительно считаете картинки товаров в магазине и их много, не забудьте, что, могли быть загружены файлы не только с расширением «.jpg», но и «.png», и «.jpeg», и «.gif», а также то, что регистр символов в имени файла в linux имеет значение. Поэтому даже для подсчета JPEG файлов имеет смысл использовать команду:
$ find . -type f -iname "*.jp*g" | wc -l