
У меня есть очень специфическое дерево каталогов в моей музыкальной библиотеке. Я хотел бы посчитать все альбомы, исключая все подкаталоги.
Например, если учесть следующее дерево каталогов:
/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
следует вернуть количество художников.