рекурсивно подсчитать все файлы в каталоге

<blockquote> <p><strong> возможно дублирование: </strong><br> <a href="https://superuser.com/questions/129088/how-can-i-count-the-number-of-folders-in-a-drive-using-linux">как подсчитать количество папок на диске с помощью linux?</a> </p> </blockquote><p>у меня очень глубокое дерево каталогов на моем linux-компьютере. я хотел бы сосчитать все файлы по этому пути, включая все подкаталоги.</p><p>например, учитывая это дерево каталогов:</p><pre><code>/home/blue /home/red /home/dir/green /home/dir/yellow /home/otherdir/ </code></pre><p>если я передам <code>/home</code>, я бы хотел, чтобы он возвратил четыре файла. или бонусные баллы, если он возвращает четыре файла и два каталога. по сути, я хочу получить эквивалент щелчка правой кнопкой мыши по папке в windows, выбора свойств и просмотра количества файлов/папок, содержащихся в этой папке.</p><p>как мне легче всего это сделать? у меня есть решение, включающее скрипт python, который я написал, но почему это не так просто, как запустить <code>ls | wc</code> или подобное?</p>

<p><code>find . -type f | wc -l</code></p><p>объяснение:<br> <code>find . -type f</code> находит все файлы (<strong> -type f </strong>) в этом (<strong>. </strong>) каталоге, а во всех подкаталогах имена файлов затем печатаются в стандартном формате по одному на строку.</p><p>это тогда по трубопроводу<strong> | </strong>into <code>wc</code> (word count) опция <code>-l</code> указывает wc только считать строки своего ввода.</p><p>вместе они считают все ваши файлы.</p>

<p>ответы выше уже отвечают на вопрос, но я добавлю, что если вы используете find без аргументов (за исключением папки, в которой вы хотите, чтобы поиск происходил), как в:</p><pre><code>find . | wc -l </code></pre><p>поиск идет намного быстрее, почти мгновенно, или, по крайней мере, для меня. это связано с тем, что предложение type должно запускать системный вызов stat () для каждого имени, чтобы проверить его тип - опуская его, вы избегаете этого.</p><p>разница заключается в том, что нужно возвращать количество файлов и папок, а не только файлов, но, по крайней мере, для меня этого достаточно, поскольку я в основном использую это, чтобы найти, в каких папках есть огромное количество файлов, на копирование и сжатие которых уходит вечность. подсчет папок по-прежнему позволяет мне находить папки с большинством файлов, мне нужно больше скорости, чем точности.</p>

<p>для файлов:</p><pre><code>find -type f | wc -l </code></pre><p>для каталогов:</p><pre><code>find -mindepth 1 -type d | wc -l </code></pre><p>они оба работают в текущем рабочем каталоге.</p>

<p>небольшое обновление до принятого ответа, если вы хотите подсчет dirs и тому подобное</p><pre><code>find $dir -exec stat -c '%f' {} ; | sort | uniq -c | sort -rn 

с баш 4+shopt -s globstar for file in / do if [ -d "$file" ];then ((d++)) elif [ -f "$file" ];then ((f++)) fi done echo "number of files: $f" echo "number of dirs: $d" </code></pre><p>не нужно дважды звонить, если вы хотите искать файлы и каталоги</p>