2014-09-11 2 views
1

Мне нужен скрипт bash, который может подсчитывать каталоги, находящиеся внутри других каталогов на FreeBSD. Дело в том, что: Путь home/myuser/direct, чем внутри этой директории есть 20 каталогов, названных только одной буквой, такой как A B C D E F и так далее. Внутри каждого каталога A в каталоге B есть много других каталогов с разными именами, такими как mydirectory1, mydirectory2 и т. Д. Внутри mydirectory1 есть файлы и каталоги differnet, и мне нужно считать только каталоги, которые находятся под mydirectory1, а не файлы. Я придумал это, но с помощью этого мне придется сделать это вручную для каждого каталога:Подсчет каталогов в UNIX

home/myuser/direct# ls -l A/* | grep ^d | wc -l 

чем для каталога B я должен буду:

home/myuser/direct# ls -l B/* | grep ^d | wc -l 

и так далее. Есть ли способ, чтобы автоматически сделать это, я имею в виду изменить букву А на Б и так далее?

PS, жаль путанице как английский не мой первый язык :(

+1

Почему ты убегаешь как корень? – Kevin

ответ

1

Это решение предполагает, что вы хотите, количество вложенных папок для каждой папки в текущей директории. Если вы хочу суммировать их все в одно значение, это другой вопрос ... Это не невероятно устойчив к вариациям в именах папок, но должен работать в большинстве случаев, когда нет странной пунктуации:

for D in */; do echo "$D": $(ls -d "$D"*/| wc -l); done 

Пример вывода:

DATA/: 14 
LOGS/: 2 
PLOTS/: 3 
SCRIPTS/: 2 
ls: libraries//*/: No such file or directory 
libraries/: 0 

Вот версия, которая подавляет ошибку для пустых папок:

for D in */; do echo "$D": $(ls -d "$D"*/ 2>/dev/null |wc -l); done 
+0

Это действительно сработало, и это именно то, что мне нужно. Большое вам спасибо @beroe –

1

Попробуйте

find * -type d -print | wc -l 
+0

Пробовал, что получил: использование: find [-H | -L | -P] [-EXdsx] [-f file] [file ...] [выражение] –

+0

@Big_M помощь кому-то возможно ТОЛЬКО, если он знает, по крайней мере, основы о том, что мы говорим ... Если вы не можете управлять одним использованием строка - просто невозможно помочь ... – jm666

+0

Хорошо, спасибо за совет, однако причина, приходящая сюда, ТОЛЬКО, потому что я не знал, как это сделать! –

Смежные вопросы