La manpage dice anche:
--remove-source-files sender removes synchronized files (non-dirs)
Se vuoi rimuovere le directory vuote nella tua fonte, se ci sono ancora file rimasti, fai un:
find . -depth -type d -empty -delete
Se è solo una directory sorgente vuota, un rmdir <directory>
sarà ovviamente sufficiente.
Il comportamento di --remove-source-files
che osservi è esattamente quello specificato da man rsync
:
--remove-file-sorgente
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.
Non esiste un comando specifico per rimuovere le directory, come mostrano chiaramente queste due discussioni in StackExchange e ServerFault. La soluzione suggerita è quella di emettere due comandi separati:
rsync -av --ignore-existing --remove-source-files source/ destination/ && \
rsync -av --delete `mktemp -d`/ source/
L'ultima parte del comando suggerito in questi due post,
rmdir source/
che è necessario per rimuovere la directory di origine (ora svuotata) ha questo modulo in questi post perché gli OP e le risposte utilizzano rsync per spostare grandi quantità di file all'interno della stessa macchina. Nel tuo caso dovrai farlo manualmente.
Utilizzando "rm -rf " ha una race condition intrinseca, potresti in particolare eliminare i file che sono stati appena creati tra rsync e il rm invocazioni.
Preferisco usare:
rsync --remove-source-files -a server:incoming/ incoming/ &&
sshserver find incoming -type d -delete
Questo NON rimuoverà le directory se non sono vuote.