Isso tudo pode ser feito como um oneliner.
for i in *.* ; do mv "$i" "${i%.*}_$(date --reference "$i" +%Y%m%dT%H%M).${i##*.}"; done
Para um literal registro de data e hora , ou seja, segundos desde a época, você pode usar:
for i in *.* ; do mv "$i" "${i%.*}_$(date --reference "$i" +%s).${i##*.}"; done
Isto tem uma verificação de segurança para operar somente em arquivos cujos nomes contenham pontos; manipula corretamente arquivos com espaços nos nomes; e assume (como normalmente seria o caso) que o campo LAST dot separated é a extensão, em vez de o campo FIRST dot separated ser o nome do arquivo e o restante ser uma extensão.
Crédito para muru para o --reference
bit; Eu não sabia sobre essa opção.