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


Ответы:


224

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

find . -type f | wc -l

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


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

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

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


9
find -type f -printf . | wc -c

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


4
Имена файлов, содержащие новые строки - это невероятно редкий случай.
Рассерженная шлюха

8
@DisgruntledGoat: Так что найти ошибку будет крайне сложно.
пользователь неизвестен

Мне нравится хороший крайний случай, особенно много лет спустя.
user38537


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считает результаты поиска


Это решение учитывает также папки, я поставил оценку, потому что это соответствовало моему случаю, что я не хотел их подсчитывать :)
топлесс

Решение не сработает для файлов, имена которых содержат символ новой строки.
пользователь неизвестен

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.