Die Manpage sagt sogar:
--remove-source-files sender removes synchronized files (non-dirs)
Wenn Sie leere Verzeichnisse in Ihrer Quelle entfernen möchten, wenn noch Dateien übrig sind, tun Sie Folgendes:
find . -depth -type d -empty -delete
Wenn es nur ein leeres Quellverzeichnis ist, ein rmdir <directory>
reicht natürlich aus.
Das Verhalten von --remove-source-files
die Sie beobachten, ist genau das, was durch man rsync
angegeben wird :
--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.
Es gibt keinen speziellen Befehl zum Entfernen der Verzeichnisse, wie diese beiden Diskussionen in StackExchange und ServerFault deutlich zeigen. Die dort vorgeschlagene Lösung besteht darin, zwei separate Befehle auszugeben:
rsync -av --ignore-existing --remove-source-files source/ destination/ && \
rsync -av --delete `mktemp -d`/ source/
Der letzte Teil des Befehls, der in diesen beiden Beiträgen vorgeschlagen wird,
rmdir source/
das zum Entfernen des (jetzt geleerten) Quellverzeichnisses benötigt wird, hat dieses Formular in diesen Beiträgen, da die OPs und die Antworten rsync verwenden, um große Mengen von Dateien innerhalb desselben Computers zu verschieben. In Ihrem Fall müssen Sie dies manuell tun.
Mit "rm -rf " hat eine inhärente Race-Condition, Sie könnten nämlich Dateien löschen, die gerade zwischen dem rsync erstellt wurden und der rm Anrufungen.
Ich bevorzuge:
rsync --remove-source-files -a server:incoming/incoming/ &&
sshserver finden eingehende -type d -delete
Dadurch werden die Verzeichnisse NICHT entfernt, wenn sie nicht leer sind.