Primeiramente, verifique se o diretório pai no destino existe. Ou seja [email protected]:/var/www/uploads
deve existir. Eu acho que com a sua formulação, o trailing .
refere-se a um diretório que o rsync tenta criar, e ele não pode fazer isso a menos que o diretório pai já exista. ou seja, o pai é [email protected]:/var/www/uploads/$NOW
.
Em segundo lugar, perceba que o comportamento do rsync é sutilmente diferente do cp de várias maneiras com o '/' no nome do arquivo. Acho que a maneira mais segura e intuitiva de fazer as coisas é usar um /
no final de todos os diretórios. Assim:
rsync -au --ignore-existing /var/www/uploads/$NOW/ -e [email protected]:/var/www/uploads/$NOW/
Diferentemente do cp, o rsync copia de forma confiável o conteúdo do diretório no argumento de origem para o conteúdo do diretório de destino, criando o diretório de destino se necessário (embora seu pai deva existir) e não colocando o diretório de origem pai) dentro do diretório de destino, se o destino já existir.
Isso é um pouco diferente do que você estava fazendo, pois a maneira como você o faz excluiria os arquivos com um nome começando com .
no diretório de origem e falharia se a lista de arquivos copiados fosse muito longa ( expansão bash limitada a um comprimento total de linha de comando de cerca de 32K caracteres se a memória me servir corretamente).