我正在收集這樣的音樂:
音樂/專輯 [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
。