Perhaps not the most elegant way (and uses a few more than two commands), but this is how I would have done it:
find . -iname "*.pdf" | while read F; do FILE=$(basename "$F"); NR=$(printf "%02d" "$(echo "$F" | sed "s/.*(\(.*\)).*/\1/")"); cp -v "$F" "./Output/$NR - $FILE"; done
Could use internal bash functions instead of some of the external utilities, but internal shell logic is (at least for me) harder to remember than simple utility commands.
The biggest gotcha in handling file names is to remember to surround the values with quote marks when outputting them – otherwise, bash will split file names with spaces into several values, and everything will break.
This is so cool, thanks Tero for taking the time to educate!
Individually, all parts are familiar to me but I probably couldn't have constructed such a beautiful pipe.
I added this as an edit into the original post so people interested in bash scripting can also find it more easily.
We're a place where coders share, stay up-to-date and grow their careers.
We strive for transparency and don't collect excess data.