Manuál dokonce říká:
--remove-source-files sender removes synchronized files (non-dirs)
Pokud chcete odstranit prázdné adresáře ve vašem zdroji, pokud tam ještě zbývají soubory, proveďte:
find . -depth -type d -empty -delete
Pokud je to jen prázdný zdrojový adresář, rmdir <directory>
bude samozřejmě stačit.
Chování --remove-source-files
co pozorujete, je přesně to, co specifikuje 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.
Neexistuje žádný konkrétní příkaz k odstranění adresářů, jak jasně ukazují tyto dvě diskuse v StackExchange a ServerFault. Navrhované řešení je vydat dva samostatné příkazy:
rsync -av --ignore-existing --remove-source-files source/ destination/ && \
rsync -av --delete `mktemp -d`/ source/
Poslední část příkazu navržená v těchto dvou příspěvcích,
rmdir source/
který je potřeba k odstranění (nyní vyprázdněného) zdrojového adresáře má v těchto příspěvcích tento formulář, protože OP a odpovědi používají rsync k přesunu velkého množství souborů na stejném počítači. Ve vašem případě to budete muset udělat ručně.
Pomocí "rm -rf " má inherentní race condition, konkrétně můžete smazat soubory, které byly právě vytvořeny mezi rsync a rm vyvolání.
Dávám přednost použití:
rsync --remove-source-files -a server:incoming/ incoming/ &&
sshserver najde příchozí -type d -delete
Toto NEODSTRANÍ adresáře, pokud nejsou prázdné.