对文件列表进行排序,就像它们是联合安装的一样 - mp3 m3u

对文件列表进行排序,就像它们是联合安装的一样 - mp3 m3u

我收藏了一些这样的音乐:

音乐/专辑 [FLAC] 音乐/专辑 [MP3]

并制作如下 m3u 播放列表(在音乐目录中运行):

find "albums [FLAC]" "albums [MP3]" -type f \( -iname "*.mp3" -o -iname "*.flac"  \) -print | sed 's/^\.\///g' | sort  >> "$out_file"

但我有多个这样的情况:

Music/albums [MP3]/Artist A/album title/track.ext
Music/albums [MP3]/Artist B/album title/track.ext
Music/albums [FLAC]/Artist A/album title/track.ext
Music/albums [FLAC]/Artist B/album title/track.ext

特定艺术家的所有专辑不会在播放列表中分组,而是由于排序而位于列表的顶部或底部。

我尝试使用 overlayfs 来联合挂载它们 - 并且这可行,但我正在寻找一种排序方法,以便 m3u 更像:

Music/albums [MP3]/Artist A/album title/track.ext
Music/albums [FLAC]/Artist A/album title/track.ext
Music/albums [MP3]/Artist B/album title/track.ext
Music/albums [FLAC]/Artist B/album title/track.ext

我觉得 sort 应该能够做到这一点,或者可以在 Python 中完成,但希望能在正确的方向上有所推动!

答案1

sort你的管道中。告诉它你需要什么:

sort -t / -k 3,3 -k 2r,2 -k 4

在哪里

  • -t /指定分隔符;
  • -k 3,3指示根据第三个字段进行排序;
  • 对于具有相同第三个字段的条目,-k 2r,2指示根据第二个字段进行反向排序
  • 如果这还不够,-k 4则考虑第四个字段以及随后的所有内容。

请注意,此特定命令根本不根据第一个字段进行排序。在您的示例中,第一个字段看起来是固定的:Music

如果您不关心它是 MP3 还是 FLAC,您可能也想忽略第二个字段。在这种情况下,排序应该根据第三个字段以及之后的所有内容进行。此命令要简单得多:

sort -t / -k 3

要了解更多信息,请参阅这个问题man 1 sort

相关内容