Hi, I was trying to map all GID/UID to 0:0 with.. rsync --chown 0:0 foo user@remote:/tmp but it bombs out with.. rsync: No match. rsync: connection unexpectedly closed (0 bytes received so far) [sender] rsync error: error in rsync protocol data stream (code 12) at io.c(226) [sender=3.1.1] I am guessing that --chown 0:0 maps internally to --usermap *:0 --groupmap *:0 but they aren't escaped properly. As a work around I am using.. rsync --usermap \\\*:0 --groupmap \\\*:0 foo user@remote:/tmp and it works. (i.e. the *'s are escaped enough the remote invocation doesn't fail). I imagine this would also work if the remote shell did not error on non-matching globs, however I think the existing behaviour is still broken as if the glob did match the behaviour could be very odd.
I looked through the code and found the --protect-args option which does make --chown work. I guess it would be difficult to fix unless the wildcard character was changed to something else. Perhaps the best work around for now would be to mention --protect-args in the --chown/--usermap/--groupmap options in the man page?
I added a comment about --protect-args to the man page. Most people don't run into this issue because the wild cards are connected to the mapping option using an equal sign, and most shells pass through unmatched wildcards with nary a wimper (e.g. bash). I use zsh, but I only set the option to complain about an empty glob for an interactive shell, so it doesn't affect me either. These days I also like to compile my rsync with --protect-args enabled by default (which I nearly included in 3.2.0, but I was a bit worried about backward compatibility issues).