rsync syntax quirk


For me, rsync has replaced cp, sftp and other tools. Something that’s boggled me is simply the way it handles slashes ending a path:

rsync user@host:/etc /

is not the same as:

rsync user@host:/etc/ /

The former will copy everything from /etc/ on the remote machine to /, but it actually copies the directory, so it won’t only copy what cp -r /etc/* /backup/ would copy, but what cp -r /etc/ /backup/ would copy: it will create a directory /etc! The latter won’t create a directory and behave exactly like cp -r /etc/* /backup/ when it comes to handling the path.

Another thing, seemingly more innocent, is how it handles escaping characters on the remote end:

rsync user@host:/Annoying\ Directory ~

This wouldn’t work.

rsync user@host:/"Annoying\ Directory" ~

This would.