Mantengo una colección de música como esta:
Música/álbumes [FLAC] Música/álbumes [MP3]
y crear listas de reproducción m3u como esta (ejecutar en el directorio Música):
find "albums [FLAC]" "albums [MP3]" -type f \( -iname "*.mp3" -o -iname "*.flac" \) -print | sed 's/^\.\///g' | sort >> "$out_file"
pero tengo varias situaciones 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 los álbumes de un artista en particular no están agrupados en la lista de reproducción y, debido a la clasificación, se encuentran al principio o al final de la lista.
Experimenté con el uso de overlayfs para montarlos en unión, y esto funciona, pero estoy buscando una forma de ordenar para que m3u se parezca más a:
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
Siento que sort debería poder hacer esto o podría hacerse en Python, ¡pero agradecería un empujón en la dirección correcta!
Respuesta1
Hay sort
en tu tubería. Dile lo que necesitas:
sort -t / -k 3,3 -k 2r,2 -k 4
dónde
-t /
especifica delimitador;-k 3,3
le dice que ordene según el tercer campo;- para entradas con el mismo tercer campo,
-k 2r,2
indica que se realice la ordenación inversa según el segundo campo - si esto no es suficiente,
-k 4
indica que se considere el cuarto campo y todo lo que sigue.
Tenga en cuenta que este comando en particular no ordena en absoluto según el primer campo. En su ejemplo, el primer campo parece fijo: Music
.
Si no le importa si es MP3 o FLAC, es posible que desee ignorar también el segundo campo. En tal caso, la clasificación debe realizarse según el tercer campo y todo lo que sigue. El comando para esto es mucho más simple:
sort -t / -k 3
Para saber más veresta preguntay man 1 sort
.