如何使用 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放置。否则,将到达 的任何路径放在 前面。/musicmusic

答案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

应返回艺术家的数量。

相关内容