How to batch rename bones and their corresponding vertex groups? If we have modeled a character or device or something that has many identical moving parts (arms, tentacles, etc.), and rigged one instance of such a part, how do we get all of the bones with the same names joined as a single armature, and also get all of the meshes joined with the vertex groups that correspond to those bones?



In the example above, the character has only six legs (the wrong number for an octopus, just to add to the poor guy's problems), but what about something with even more appendages, like a centipede? What about a spider robot with very complex leg rigs? In cases like these nobody wants to go renaming each bone by hand, and then renaming each vertex group by hand.

So, we need an add-on or a Python script for batch renaming. The only add-on I've found for batch renaming is too simplistic - just for renaming at the object level. And although I found and tried a script for renaming bones, I got an error when I ran it. I also found a script for renaming vertex groups, but I haven't found any scripts that handle the mesh and armature data together.

What is the most efficient way to accomplish this?
Usually an armature is the parent of the mesh that it deforms (from using &#9096; CtrlP->Automatic Weights), this means we can get the mesh deformed by the armature by looking at it's children property. We can then rename both the bone and vertex group to a new name that is unique among all armatures allowing a conflict free merge. Adding the rig name to the bone name so that "Bone" might become "Leg1_rig_Bone" seems like a good approach.

import bpy

for rig in bpy.context.selected_objects:
    if rig.type == 'ARMATURE':
        for mesh in rig.children:
            for vg in mesh.vertex_groups:
                new_name = rig.name + '_' + vg.name
                rig.pose.bones[vg.name].name = new_name
                vg.name = new_name