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.
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
):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:
This will NOT remove the directories if they are not empty.
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":Why not just add
rm -rf source_directory
after your rsync ?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.