Duplicating multiple objects in Hierarchies while keeping global position accurate.

Lets say hypothetically we have 2 objects.

We have 1 empty located at 1,1,0. We have 1 cube located at 2,2,0.

The cube at 2,2.0 is a child of the empty at 1,1,0.

I would like to duplicate both, to make a mirrored set across the x axis. this would mean there would now be a cube at -2,2,0 and an empty at -1,1,0.

Currently, when simply selecting all, then scaling the x axis to negative 1, all objects have the same locations listed as if I had not moved them, yet they are visually in different locations. I would like them to reflect where they actually are globally.

Child object lives in parent transform space. Would need to unparent and keep transformation to get its location, or use a constraint instead of parenting, then apply visual transform and set inverse.