Знайти кількість файлів у папках та підпапках?


143

Я хочу знайти загальний підрахунок кількості файлів у папці та всіх її підпапок.

Відповіді:


224

Може щось подібне

find . -type f | wc -l

зробив би трюк. Спробуйте команду з батьківської папки.


3
У файлі, імена якого містять новий рядок, рішення не вдасться.
користувач невідомий

2
@user невідомо: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
ця команда спрацювала як шарм у моєму випадку, схожа на чорну магію
pcko1

27

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

У ньому буде перераховано всі файли та папки в заданій папці, а в кінці наведено резюме.


14

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

ls -l | grep ^- | wc -l

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

ls -lR | grep ^- | wc -l

1
Вони не будуть рахувати приховані файли.
користувач невідомий

Правда. Я більше схильний прийняти та використовувати вашу відповідь як рішення.
користувач38537

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: Тому помилку буде надзвичайно важко знайти.
користувач невідомий

Мені подобається хороший крайній випадок, особливо через багато років.
користувач38537


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.