Решение bash, которое удаляет расширение, заменяет периоды символами подчеркивания, затем добавляет обратно расширение:
for f in *.png; do g="${f%.*}"; echo mv -- "$f" "${g//./_}.png"; done
Удалите echo, как только вы убедитесь, что он работает. Его можно было бы довольно легко распространить на общее расширение .ext, если у вас более одного типа файла, например
for f in *.*; do g="${f%.*}"; e="${f##*.}"; echo mv -- "$f" "${g//./_}.$e"; done