Se você quiser extrair o título (e, caso seja útil, o tracknum), você deve ser capaz de fazer assim:
read -r tracknum title <<<$(basename "$mp3" .mp3)
Para os outros bits, eu começaria dividindo o nome do arquivo por /
para isolar as partes. Por exemplo:
album_year=$(cut -d/ -f2 <<<"$mp3")
album=${album%\ (*)}
year=${album_year:-5:4}
O último depende do ano realmente presente e quatro dígitos; se isso não for garantido, você poderá fazê-lo usando uma expressão mais desajeitada:
year=${album_year:$((${#album}+2)):$((${#album_year}-${#album}-3}
Além disso, se você não sabe em que profundidade está o caminho da parte album_year
, você pode extrair o segundo último segmento (ou seja, o diretório imediato do arquivo) com:
album_year=$(basename "$(dirname "$mp3")")
Ou você pode dividir o caminho inteiro em uma matriz:
IFS=/ read -ra segments <<<"$mp3"
album_year=${segments[-2]}