Tudo o que você precisa é remover .gif de $f e colocá-lo de volta em:
for f in *; do mv -v -- "$f" "$(date -d "${f%%.gif}" '+%Y%m%d%H%M')".gif; done
${f%%.gif} usa a variável f e remove a última ocorrência (portanto, # duas vezes) de .gif , portanto, mesmo um nome de arquivo estranho como 1.gif2.gif obteria apenas seu último .gif removido. Este incrível recurso é chamado de Expansão de Parâmetros Bash e quando você procura por este nome, você pode ler tudo sobre o seu poder deslumbrante, e. g. em este FAQ do Bash - é capaz de muito mais!