Solução
Para remover os 4 números / letras que precedem o ponto final de todos os arquivos, você pode usar o seguinte loop:
for file in *.xyz ; do
NEWFILE=$(echo "$file" |sed -re 's/[a-z|0-9][a-z|0-9][a-z|0-9][a-z|0-9](\.)/\./g')
mv -v $file $NEWFILE
done
Explicação
for file in *.xyz ; do
Faz um loop em todos os arquivos com uma extensão .xyz
NEWFILE=$(echo "$file" |sed -re 's/[a-z|0-9][a-z|0-9][a-z|0-9][a-z|0-9](\.)/\./g')
Crie uma variável chamada NEWFILE
contendo o nome do arquivo depois de remover um padrão que corresponda a [a-z|0-9][a-z|0-9][a-z|0-9][a-z|0-9]
(uma mistura de 4 números ou letras) e seja seguido por um ponto final ( (\.)
).
mv -v $file $NEWFILE
Mova o arquivo para o novo nome, o -v
imprimirá o processo de movimentação no seguinte formato
'abcdefg123456a789.xyz' -> 'abcdefg123456.xyz'
No momento, isso não cobre a correção de extensões, mas uma solução semelhante à acima pode ser usada, mas com o comando sed sendo sed 's/\.xyz.*/\.xyz/g'
.