Este comando irá sincronizar todos os arquivos de / a / b para / c / d, e irá preservar permissões, datas de modificação, links simbólicos, e irá recursar para diretórios, ('-a', ou '--archive' faz tudo isso, é o mesmo que usar '-rlptgoD', que são opções separadas para tudo isso), -v é para verbose e '--remove-source-files' excluirá os arquivos de origem depois que eles forem totalmente criados no destino.
Se o diretório d dentro de / c / não existir, ele será criado.
rsync -av --remove-source-files /a/b /c/d
Se você deseja mover para o servidor remoto, então isso irá sincronizar com o caminho do servidor remoto, '-z' irá compactar os dados do arquivo durante a transferência.
rsync -avz --remove-source-files /a/b user@hostname_or_ip:/c/d
Diretórios não serão removidos por '--remove-source-files', então você precisa rodar o rm -rf / a / b após o rsync para remover todos os diretórios dentro de / a / b /
Em um comando de linha você pode colocar tudo assim
rsync -av --remove-source-files /a/b /c/d; if find /a/b/ -type f | read; then echo "Not all files were synced"; else rm -rf /a/b; fi
Isso executará o rsync e, em seguida, verificará se ainda existem arquivos, para evitar a exclusão da pasta se alguns arquivos não tiverem sido totalmente sincronizados e, portanto, não tiverem sido excluídos e depois imprimir que nem todos os arquivos foram sincronizados ou excluir a pasta não há arquivos nele.