私は次のような音楽コレクションを保管しています:
音楽/アルバム [FLAC] 音楽/アルバム [MP3]
次のような m3u プレイリストを作成します (Music ディレクトリで実行)。
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
3 番目のフィールドに従って並べ替えるように指示します。- 同じ3番目のフィールドを持つエントリについては、
-k 2r,2
2番目のフィールドに従って逆順に並べ替えるように指示します。 - これで十分でない場合は、
-k 4
4 番目のフィールドとそれに続くすべてのものを考慮するように指示します。
この特定のコマンドは、最初のフィールドに従ってソートしないことに注意してください。例では、最初のフィールドは固定されているように見えますMusic
。
MP3 か FLAC か気にしない場合は、2 番目のフィールドも無視できます。その場合、ソートは 3 番目のフィールドとそれ以降のすべてに従って行う必要があります。これを行うコマンドははるかに簡単です。
sort -t / -k 3
詳しくはこの質問そしてman 1 sort
。