rsync can be coaxed into moving folders very similarly and superiorly to traditional mv with the following options:

rsync -axvvES --remove-source-files source_directory /destination/

However one thing I cannot yet seem to get it to do is to remove original directories. The --remove-source-files flag does just that, removes the source files, but not also source directories. I wish there were a --remove-source-directories flag as well, but there's not.

How can I deal with this? I suppose I can just issue an rm -fr after the move, however I'd prefer to keep the procedure all in one process vs introducing a potential for mistakes.

  • What is your reason for not using mv?
    – Nils
    Apr 28, 2012 at 20:04
  • 2
    Different volumes and I need to preserve all attributes, including times.
    – ylluminate
    Apr 28, 2012 at 20:12
  • 1
    Same need here unix.stackexchange.com/q/78375/3858.
    – Alix Axel
    Jun 7, 2013 at 22:17
  • 2
    I'm very surprised rsync has no option for this, especially when it does at the destination side. I end up doing find . -type d -empty | xargs rmdir -p May 7, 2019 at 2:24
  • You know @Sridhar-Sarnobat I can't help but wonder if there's a way to pass results from an rsync session into a list that is then processed following the process that then cleans it up... Hmm.
    – ylluminate
    May 7, 2019 at 2:27

4 Answers 4


I haven't found a command that does that in one go, but since rsync still performs better than rm -rf (specially if you have a very large number of directories) here are two rsync command that do a "move":

rsync -av --ignore-existing --remove-source-files source/ destination/ && \
rsync -av --delete `mktemp -d`/ source/ && rmdir source/

I ended up in a similar situation. I wanted to avoid rm -rf, knowing that rsync failed to copy some files, and I didn't want to loose them.

To simply delete the empty directories, I found this one the most convenient (from sourcedir):

find . -type d -empty -delete
  • 1
    Yep, thank goodness for -empty, which I only found out recently and it's become very common for me to use. Aug 26, 2019 at 19:37
  • 1
    Thank @lp_ This one should be updated as the best answer Mar 24, 2021 at 21:50

Using "rm -rf" has an inherent race condition, you could namely delete files that were just created between the rsync and the rm invocations.

I prefer to use:

rsync --remove-source-files -a server:incoming/ incoming/ && 
ssh server find incoming -depth -type d -delete

This will NOT remove the directories if they are not empty.


Why not just add rm -rf source_directory after your rsync ?

rsync -axvvES --remove-source-files source_directory /destination/ && rm -rf source_directory

Each command-line program is (idealy) made to do a specified task, and it's up to you to glue several together to accomplish more complex tasks.

  • 2
    I think you're right. I believe I ultimately have to drill down to the bottom as well first as I cannot get caught just moving the way rsync normally does. Probably need to use find -depth. Would you have any suggestion as to a quick algorithmic approach to getting down to the bottom of the dir stack, mv'ing with rsync, rm'ing as you note, and then stepping back up the tree?
    – ylluminate
    Apr 29, 2012 at 4:48

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.