![对文件列表进行排序,就像它们是联合安装的一样 - mp3 m3u](https://linux22.com/image/1585891/%E5%AF%B9%E6%96%87%E4%BB%B6%E5%88%97%E8%A1%A8%E8%BF%9B%E8%A1%8C%E6%8E%92%E5%BA%8F%EF%BC%8C%E5%B0%B1%E5%83%8F%E5%AE%83%E4%BB%AC%E6%98%AF%E8%81%94%E5%90%88%E5%AE%89%E8%A3%85%E7%9A%84%E4%B8%80%E6%A0%B7%20-%20mp3%20m3u.png)
我收藏了一些这样的音乐:
音乐/专辑 [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
。