La página de manual incluso dice:
--remove-source-files sender removes synchronized files (non-dirs)
Si desea eliminar directorios vacíos en su fuente, si aún quedan archivos, haga lo siguiente:
find . -depth -type d -empty -delete
Si es solo un directorio fuente vacío, un rmdir <directory>
por supuesto será suficiente.
El comportamiento de --remove-source-files
que observas es exactamente lo especificado por man rsync
:
--remove-source-files
This tells rsync to remove from the sending side the files (meaning non-directories) that are a part of the transfer and have been successfully duplicated on the receiving side.
No hay un comando específico para eliminar los directorios, como muestran claramente estas dos discusiones en StackExchange y ServerFault. La solución sugerida allí es emitir dos comandos separados:
rsync -av --ignore-existing --remove-source-files source/ destination/ && \
rsync -av --delete `mktemp -d`/ source/
La última parte del comando sugerido en estas dos publicaciones,
rmdir source/
que se necesita para eliminar el directorio de origen (ahora vacío) tiene este formulario en estas publicaciones porque los OP y las respuestas usan rsync para mover grandes cantidades de archivos dentro de la misma máquina. En tu caso tendrás que hacerlo manualmente.
Usando "rm -rf " tiene una condición de carrera inherente, podría eliminar archivos que se acaban de crear entre rsync y la firma invocaciones.
Prefiero usar:
rsync --remove-source-files -a servidor:entrante/ entrante/ &&
sshserver encuentra entrante -escriba d -elimine
Esto NO eliminará los directorios si no están vacíos.