Classifique a lista de arquivos como se fossem montados em união - mp3 m3u

Classifique a lista de arquivos como se fossem montados em união - mp3 m3u

Estou mantendo uma coleção de músicas como esta:

Músicas/álbuns [FLAC] Músicas/álbuns [MP3]

e criando playlists m3u como esta (execute no diretório Music):

find "albums [FLAC]" "albums [MP3]" -type f \( -iname "*.mp3" -o -iname "*.flac"  \) -print | sed 's/^\.\///g' | sort  >> "$out_file"

mas tenho várias situações como esta:

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

Todos os álbuns de um determinado artista não são agrupados na lista de reprodução e, devido à classificação, ficam no topo ou no final da lista.

Eu experimentei usar overlayfs para montá-los em união - e isso funciona, mas estou procurando uma maneira de classificar para que o m3u fique mais parecido com:

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

Eu sinto que sort deveria ser capaz de fazer isso ou poderia ser feito em Python, mas gostaria de receber um empurrãozinho na direção certa!

Responder1

Está sortno seu pipeline. Diga o que você precisa:

sort -t / -k 3,3 -k 2r,2 -k 4

onde

  • -t /especifica o delimitador;
  • -k 3,3diz para classificar de acordo com o terceiro campo;
  • para entradas com o mesmo terceiro campo, -k 2r,2informa para inverter a classificação de acordo com o segundo campo
  • se isso não for suficiente, -k 4diz para considerar o quarto campo e tudo o que se segue.

Observe que este comando específico não classifica de acordo com o primeiro campo. No seu exemplo, o primeiro campo parece fixo: Music.

Se você não se importa se é MP3 ou FLAC, você também pode ignorar o segundo campo. Nesse caso a classificação deve ser feita de acordo com o terceiro campo e tudo o que vem depois. O comando para isso é muito mais simples:

sort -t / -k 3

Para saber mais vejaessa questãoe man 1 sort.

informação relacionada