Ordena la lista de archivos como si estuvieran montados en unión - mp3 m3u

Ordena la lista de archivos como si estuvieran montados en unión - mp3 m3u

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 sorten tu tubería. Dile lo que necesitas:

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

dónde

  • -t /especifica delimitador;
  • -k 3,3le dice que ordene según el tercer campo;
  • para entradas con el mismo tercer campo, -k 2r,2indica que se realice la ordenación inversa según el segundo campo
  • si esto no es suficiente, -k 4indica 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.

información relacionada