Recursive move utility on Unix?
- by Thomas Vander Stichele
Sometimes I have two trees that used to have the same content, but have grown out of sync (because I moved disks around or whatever). A good example is a tree where I mirror upstream packages from Fedora.
I want to merge those two trees again by moving all of the files from tree1 into tree2.
Usually I do this with:
rsync -arv tree1/* tree2
Then delete tree1.
However, this takes an awful lot of time and disk space, and it would be much easier to be able to do:
mv -r tree1/* tree2
In other words, a recursive move. It would be faster because first of all it would not even copy, just move the inodes, and second I wouldn't need a delete at the end.
Does this exist ?
As a test case, consider the following sequence of commands:
$ mkdir -p a/b
$ touch a/b/c1
$ rsync -arv a/ a2
sending incremental file list
created directory
./
b/
b/c1
b/c2
sent 173 bytes received 57 bytes 460.00 bytes/sec
total size is 0 speedup is 0.00
$ touch a/b/c2
What command would now have the effect of moving a/b/c2 to a2/b/c2 and then deleting the a subtree (since everything in it is already in the destination tree) ?