Q:

difference between find . -name '*.xyz' (dot space hyphen) and find . .name '*.xyz' (dot space dot)

Our on-call staffer accidentally deleted files in our production server.
I instructed him to issue a find command to delete stray files like so (notice find dot space hyphen)
find . -name '*.xyz' -exec rm '{}' \;

but as he copied/pasted the command from my email to his shell session, the hyphen was changed to a dot (I witnessed it. He showed it to me) and the following command was executed (notice find dot space dot)
find . .name '*.xyz' -exec rm '{}' \;

This deleted files locally and recursively. Including symbolic links. Thankfully, we were able to recover everything from a backup.
The man page on my server only the -name flag. Nothing about .name. Why did find ignore the file extension I specified?
We're on Red Hat Enterprise Linux Server release 5.10 (Tikanga), running KSH 93.

A:

In practice find searched for all files starting from . , .name, and '.xyz' , interpreting those as paths, probably the last two gave error messages like 
find: `.name': No such file or directory
find: `*.xyz': No such file or directory

and then executed the rm command on those.

A:

If you understand why program A B C is interpreted different than program A -B C then you will understand what happened.  
As far as find is concerned, you never specified an extension because you never used the -name flag.  .name is interpreted as a path to search just like ..  find allows you to specify multiple paths like that.  You told find to search in files and directories named ., files and directories named .name, and files and directories named '*.xyz' and delete everything there.

