24

Мне нужно организовать внешний жесткий диск таким образом, чтобы на нем было не более 500 папок. Панель "Свойства" в Ubuntu показывает только количество файлов, а не количество папок.

Есть ли простая командная строка, которая скажет мне количество подкаталогов?

Мне нужно посчитать рекурсивно, и это внешний жесткий диск, смонтированный в /media/MUSIC/ . Это для автомобильной стереосистемы, чья документация гласит, что она читает только первые 500 папок.

9 ответов9

35

Найти все папки в целом, включая подкаталоги?

find /mount/point -type d | wc -l

... или найти все папки в корневом каталоге (не включая подкаталоги)?

find /mount/point -maxdepth 1 -type d | wc -l
20

Перейдите к своему диску и просто выполните

ls -lR | grep ^d | wc -l
4

Новые строки являются допустимыми символами в именах каталогов. Я предлагаю разрешить find напечатать пустую строку для каждого найденного каталога, а затем wc считает эти строки.

find /mount/point -type d -printf '\n' | wc -l
3

Попробуйте следующее [см. Ниже]:

ls -1 -p | grep "/" | wc -l

Это напечатает список из одного каталога текущего каталога с конечными слешами для элементов, которые являются подкаталогами, а затем подсчитает строки с косыми чертами.

РЕДАКТИРОВАТЬ: вы, вероятно, должны пойти с ответом Quack Quixote, так как он немного более явный, но я исправил мой (после учета предложений кряк).

ls -Rp | grep "/$" | wc -l
1

Я нашел du --inodes полезным, но я не уверен, какая версия du ему требуется. На Ubuntu 17.10 работает следующее:

du --inodes      # all files and subdirectories
du --inodes -s   # summary
du --inodes -d 2 # depth 2 at most

Объединить с | sort -nr для сортировки по убыванию по количеству содержащихся inode.

1

Я написал ffcnt для ускорения рекурсивного подсчета файлов при определенных обстоятельствах: ротационные диски и файловые системы, которые поддерживают отображение экстентов .

Это может быть на порядок быстрее, чем ls или find подходы на основе

1

Когда существует большое количество каталогов, такие инструменты, как tree могут занять вечность, чтобы закончить или даже зависнуть, поэтому вы можете захотеть использовать что-то более эффективное.

Наиболее эффективный способ подсчета каталогов, о которых я могу подумать, заключается в следующем, так как find выводит только один . для каждой найденной папки вместо полного пути и имени файла wc нужно только выполнить итерацию по количеству символов:

find /mount/point -type d -printf '.' |wc -c

Чтобы исключить /mount/point саму из расчета и только подсчитать подкаталоги:

find /mount/point -mindepth 1 -type d -printf '.' |wc -c
0

Мне нравится использовать дерево, чтобы получить количество каталогов с

tree -d -R -fi --noreport | wc -l

Или неправильное использование находки, чтобы показать, что большая часть папок находится с

find . -type d -printf "%h\n" | cut -d/ -f-2 | sort | uniq -c | sort -rn
-2

Найти количество папок и каталог в текущем каталоге

Введите следующую команду в своем терминале

echo */ | wc

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .