Using rsync to move (not copy) files between directories?
You can pass --remove-source-files
to rsync to move files instead of copying them.
But in your case, there's no point in using rsync, since the destination is empty. A plain mv
will do the job as fast as possible.
In your case, what could make a difference to performance is the choice of network protocol, if you have a choice among NFS, Samba, sshfs, sftp, rsync over ssh, tar piped into ssh, etc. The relative speed of these methods depends on the file sizes, the network and disk bandwidth, and other factors, so there's no way to give general advice, you'll need to run your own benchmarks.
Since --remove-source-files
does not remove directories, I issue the following commands to move files over ssh:
rsync -avzh --remove-source-files --progress /source/ user@server:/target \
&& find /source -type d -empty -delete
I personally like the --progress
feature, as I do this transfer manually. Remove it if you're using a script. I expect that it slows down transfers marginally.
The find
command's delete option only deletes empty directories – do not use rm -rf
, as it may delete non-empty directories in case a file was not transferred. The -delete
option turns on the -depth
option so that empty directory trees are deleted from the "bottom" up.
In general as Gilles said there is no advantage to using rsync
to move files when mv
will get the same job done simpler and there is no potential speed gain between ordinary file systems.
There are however some times when there is an advantage. In particular, if you have any doubts about the stability of either the source, the destination, or the machine doing the work, using rsync
gives you resume ability. This can be a notable advantage if you transfer is very large and, say, your power grid is unreliable. Using rsync will be a more stable way to avoid data corruption in the event of a failure and pick up where you left off.