Как подсчитать количество папок на определенном уровне с помощью терминала Linux?

Как подсчитать количество папок на определенном уровне с помощью терминала Linux?

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

Например, если учесть следующее дерево каталогов:

/music/
/music/Davis, Miles/                           
/music/Davis, Miles/Kind of Blue/                
/music/Davis, Miles/Tutu/                    
/music/Hendrix, Jimi/                              
/music/Hendrix, Jimi/Axis Bold As Love/               
/music/Hendrix, Jimi/Electric Ladyland/              
/music/Hendrix, Jimi/Electric Ladyland/Disk 1   
/music/Hendrix, Jimi/Electric Ladyland/Disk 2

Я бы хотел, чтобы команда возвращала «4».

По сути, я хочу, чтобы команда возвращала количество альбомов или бонусные баллы, если она возвращает «2» Интерпретаторов и «4» альбомов.

(И двойные бонусные баллы, если дополнительно указаны интерпретации и альбомы.)

Как мне проще всего это сделать?

решение1

Чтобы увидеть четыре альбома:

$ ls -d1 music/*/*/
music/Davis, Miles/Kind of Blue/
music/Davis, Miles/Tutu/
music/Hendrix, Jimi/Axis Bold As Love/
music/Hendrix, Jimi/Electric Ladyland/

Чтобы их посчитать:

$ printf "%q\n" music/*/*/ | wc -l
4

Формат %qиспользуется здесь для того, чтобы названия альбомов с символами новой строки не учитывались более одного раза.

Чтобы увидеть художников:

$ ls -d1 music/*/
music/Davis, Miles/
music/Hendrix, Jimi/

Чтобы подсчитать количество художников:

$ printf "%q\n" music/*/ | wc -l
2

Вышеуказанные команды предполагают, что musicнаходится в текущем каталоге. Если каталог musicна самом деле /music, то поставьте /перед musicво всех вышеприведенных командах. В противном случае поставьте перед любым путем, который достигнет music.

решение2

Вы можете использовать findдля перечисления всех подкаталогов. Затем просто посчитайте количество слешей в строке и сообщите, как часто их было 3:

find -type d | sed s%[^/]%%g | grep -c ^///$

Используйте ^//$для получения количества интерпретаций.

решение3

Я думаю, ты ищешь немного магии «найти». Бег

find /music -mindepth 2 -maxdepth 2 -type d | wc -l

должен дать вам количество альбомов в вашей коллекции. Работает

find /music -mindepth 1 -maxdepth 1 -type d | wc -l

следует вернуть количество художников.

Связанный контент