La page de manuel indique même :
--remove-source-files sender removes synchronized files (non-dirs)
Si vous souhaitez supprimer des répertoires vides dans votre source, s'il reste des fichiers, faites un :
find . -depth -type d -empty -delete
Si c'est juste un répertoire source vide, un rmdir <directory>
suffira bien sûr.
Le comportement de --remove-source-files
que vous observez est exactement celui spécifié par man rsync
:
--remove-fichiers-source
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.
Il n'y a pas de commande spécifique pour supprimer les répertoires, comme le montrent clairement ces deux discussions dans StackExchange et ServerFault. La solution suggérée consiste à émettre deux commandes distinctes :
rsync -av --ignore-existing --remove-source-files source/ destination/ && \
rsync -av --delete `mktemp -d`/ source/
La dernière partie de la commande suggérée dans ces deux articles,
rmdir source/
qui est nécessaire pour supprimer le répertoire source (maintenant vidé) a cette forme dans ces messages car les OP et les réponses utilisent rsync pour déplacer de grandes quantités de fichiers au sein de la même machine. Dans votre cas, vous devrez le faire manuellement.
Utilisation de "rm -rf " a une condition de concurrence inhérente, vous pouvez notamment supprimer les fichiers qui viennent d'être créés entre le rsync et le rm invocations.
Je préfère utiliser :
rsync --remove-source-files -a serveur:incoming/incoming/ &&
sshserver trouve entrant -type d -delete
Cela ne supprimera PAS les répertoires s'ils ne sont pas vides.