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á sort
no seu pipeline. Diga o que você precisa:
sort -t / -k 3,3 -k 2r,2 -k 4
onde
-t /
especifica o delimitador;-k 3,3
diz para classificar de acordo com o terceiro campo;- para entradas com o mesmo terceiro campo,
-k 2r,2
informa para inverter a classificação de acordo com o segundo campo - se isso não for suficiente,
-k 4
diz 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
.