Другой способ, который сохраняет расширение (если присутствует) с помощью rename:
for f in *; do rename -n "s/([^.]+)(\.?.*)/\$1_$(< "$f" wc -l)\$2/" "$f"; done
Если результат является ожидаемым, удалите опцию -n:
for f in *; do rename "s/([^.]+)(\.?.*)/\$1_$(< "$f" wc -l)\$2/" "$f"; done