Найти количество файлов в папке и подпапках?

143

Я хочу узнать общее количество файлов в папке и всех ее подпапках.

с обнаженной грудью
источник

Ответы:

224

Может быть что-то вроде

find . -type f | wc -l

сделал бы трюк. Попробуйте команду из родительской папки.

sagarchalise
источник
3
Решение не сработает для файлов, имена которых содержат символ новой строки.
пользователь неизвестен
2
@ пользователь неизвестен:find . -type f -ls | wc -l
устроить
1
еще быстрее:find . -type f -print0 | tr -d -c '\0' | wc -c
организовать
13
@arrange: еще быстрее: find . -type f -printf . | wc -c- Я принимаю печать для моего решения вместо моего -exec echo.
пользователь неизвестен
1
эта команда сработала как
брелок
27

Используйте treeкоманду. Возможно, вам придется установить treeпакет.

В нем будут перечислены все файлы и папки в данной папке, а в конце приведена сводная информация.

Эгиль
источник
14

Для подсчета файлов (даже файлов без расширения) в корне текущего каталога используйте:

ls -l | grep ^- | wc -l

Для рекурсивного подсчета файлов (даже файлов без расширения) из корня текущего каталога используйте:

ls -lR | grep ^- | wc -l
user38537
источник
1
Те не будут считать скрытые файлы.
пользователь неизвестен
Правда. Я более склонен принять и использовать ваш ответ в качестве решения.
user38537
13

Самый быстрый и простой способ, это использовать tree. Его скорость ограничена вашим выходным терминалом, поэтому, если вы передадите результат tail -1, вы получите немедленный результат. Вы также можете контролировать, на каком уровне каталога вам нравятся результаты, используя -Lопцию. Для цветного вывода используйте -C. Например:

$ tree share/some/directory/ | tail -1
558 directories, 853 files

$ tree -L 2 share/some/directory/ | tail -1
120 directories, 3 files

Если его там еще нет, вы можете получить его здесь .

not2qubit
источник
9
find -type f -printf . | wc -c

Не считайте выходные строки поиска, потому что имена файлов, содержащие 99 новых строк, будут считаться как 100 файлов.

неизвестный пользователь
источник
4
Имена файлов, содержащие новые строки - это невероятно редкий случай.
Рассерженная шлюха
8
@DisgruntledGoat: Так что найти ошибку будет крайне сложно.
пользователь неизвестен
Мне нравится хороший крайний случай, особенно много лет спустя.
user38537
3

Используйте эту команду для каждой папки в пути

for D in *; do echo $D; find $D -type f| wc -l; done
Шрирам Мурали
источник
1

Похоже, что поиск быстрее, чем в дереве, поэтому я использовал ниже для подсчета файлов в каждом каталоге текущего рабочего каталога (игнорируя файлы в CWD) с разрешением каталогам иметь пробелы:

ls -d */ | while read dir_line do echo -n "$dir_line :" find "$dir_line" -type f | wc -l done

Майк Бундс
источник
Парсинг вывода ls- очень плохая идея.
souravc
Отличный код, как я могу расположить выходные строки, скажем, в возрастающем или уменьшающемся количестве файлов
nightcrawler
0

Вы можете использовать find . | wc -l

find .отобразит список всех файлов и папок и их содержимое, начиная с текущей папки.
wc -lсчитает результаты поиска

Дэвид
источник
Это решение учитывает также папки, я поставил оценку, потому что это соответствовало моему случаю, что я не хотел их подсчитывать :)
топлесс
Решение не сработает для файлов, имена которых содержат символ новой строки.
пользователь неизвестен
0

Я бы пошел с этим вариантом сам:

ls -alR | grep -c ^ -

Чарльз
источник
3
Пожалуйста, добавьте некоторые детали ...
Pierre.Vriens