RSYNC Does Not Delete Source Directories
I'm using rsync to essential fetch files off a server, then delete the files from the server once I have them locally. The full command I'm running is below.
This does successfully delete the files on the source server, however empty directories still remain. I don't get any messages or errors. All output is normal. Perhaps this is the intended functionality.
How can I tell rsync to clean everything, including the directories?
rsync --progress -vrzh --remove-source-files
Version is 3.0.9 on both ends.
The behavior of --remove-source-files
that you observe is exactly that specified by 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.
There is no specific command to remove the directories, as these two discussions in StackExchange and ServerFault clearly show. The solution suggested there is to issue two separate commands:
rsync -av --ignore-existing --remove-source-files source/ destination/ && \
rsync -av --delete `mktemp -d`/ source/
The last piece of the command suggested in these two posts,
rmdir source/
which is needed to remove the (now emptied) source directory has this form in these posts because the OPs and the answers are using rsync to move large amounts of files within the same machine. In your case you will have to do this manually.
The manpage mentions that it only removes non-dirs:
--remove-source-files sender removes synchronized files (non-dirs)
This is expected behavior.
If you want to remove empty directories in your source, if there are still files left, do a:
find . -depth -type d -empty -delete
This will recurse, because it is using find
, and only work with empty directories (via the -empty
option). The -depth
option is needed to go depth-first. Finally, -delete
deletes those directories.
If it's just one empty source directory, a rmdir <directory>
will of course suffice.