我的音乐库中有一个非常具体的目录树。我想统计所有专辑,不包括所有子目录。
例如,给定以下目录树:
/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
应返回艺术家的数量。