Eu acredito que o problema é que o rsync vê os nomes dos caminhos como sendo relativos ao diretório de origem. Então, por exemplo, se eu estou sincronizando este diretório:
$ ls /home/me/foo
bar baz
Em seguida, os caminhos de arquivo que ele conhece serão como foo/bar/...
e foo/baz/...
. Se você adicionar o sinalizador detalhado ao rsync, verá coisas como:
public_html/foo
277 100% 0.56kB/s 0:00:00 (xfer#1390, to-check=0/1393)
Tente apenas:
rsync -azP --exclude=public_html/batchupload [email protected]:/home/xxxxx/public_html /var/www/xxxxx/public_html