ユニオンマウントされたかのようにファイルのリストを並べ替える - mp3 m3u

ユニオンマウントされたかのようにファイルのリストを並べ替える - mp3 m3u

私は次のような音楽コレクションを保管しています:

音楽/アルバム [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,33 番目のフィールドに従って並べ替えるように指示します。
  • 同じ3番目のフィールドを持つエントリについては、-k 2r,22番目のフィールドに従って逆順に並べ替えるように指示します。
  • これで十分でない場合は、-k 44 番目のフィールドとそれに続くすべてのものを考慮するように指示します。

この特定のコマンドは、最初のフィールドに従ってソートしないことに注意してください。例では、最初のフィールドは固定されているように見えますMusic

MP3 か FLAC か気にしない場合は、2 番目のフィールドも無視できます。その場合、ソートは 3 番目のフィールドとそれ以降のすべてに従って行う必要があります。これを行うコマンドははるかに簡単です。

sort -t / -k 3

詳しくはこの質問そしてman 1 sort

関連情報