對檔案清單進行排序,就像它們是聯合安裝的一樣 - 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

相關內容