Something like this:
rsync -avh --delete /local/directory username@remotehost:/home/public
This will create directory within /home/public. If you however want to have the contents of directory directly in /home/public use something like (note that trailing slash):
rsync -avh --delete /local/directory/ username@remotehost:/home/public
Check out man rsync for more options. The ones used above:
--delete will remove nonexisting files on the remote host, so be careful about what you transfer.
a is for "archiving" and should be useful in most cases
h will enable human readable file sizes
Some additional options you may want to use:
--progress to see the current progress as well
--dry-run to see what would theoretically be transmitted (but don't actually transmit anything)