`find` is more reliable. `ls` would be fine if it would produce null-terminated strings.
I was doing some small testings and you can find your initial patch + some my modifications: `~davidlt/public/debug_ib.patch`

Mainly, I would call a common part as `common.debug` in each `.debug` directory. I would call `xargs` as `xargs -t -n1 --max-procs=%{compiling_processes}` (that will print the command to be executed and run in concurrent way ==> speedup).

I also had problems running `--compress-debug-sections` and `--only-keep-debug` on the same `objcopy` invocation, thus I split those in two invocations.