Como afirmado por jas,
scp -r localDir user @ server: remoteDir
deve fazer uma cópia recursiva. Se você se preocupar com registros de data e hora de seus arquivos, isso adiciona o sinalizador -p e eles também são mantidos como em seu servidor local (caso contrário, eles serão alterados para a hora da cópia).
Isso é bom com pequenos volumes de dados. Se você tiver que fazer isso regularmente em grandes volumes (grande número de arquivos) e só quiser atualizar o que foi alterado, recomendo usar o rsync.
Funcionaria assim:
rsync -avz locaDir user@remoteServer:remoteDir
Você precisará do rsync no osx e no ubuntu (o que é possível;)).