When there's nothing to be done
The next time we run the rsync command, there is nothing to copy. Nothing has changed in the archive directory so nothing is changed on the original. Still we see some bytes going back and forth because the rsync processes still need to compare notes and determine if any files or file content needs to move.
orig$ rsync -av archive remhost:~unixdweeb building file list ... done archive/ sent 132 bytes received 26 bytes 63.20 bytes/sec total size is 1170 speedup is 7.41
Dealing with new content
When a new file shows up on the remote archive, we have to adjust our rsync command if we want our two archive directories to remain exactly the same. Our next rsync operation shows that's just what happens. By adding the --delete option, we tell rsync to delete any files on the destination system that don't exist on the source system.
orig$ ls archive newfile try1 tryme tryme1 tryme2 orig$ rsync -av --delete archive remhost:~unixdweeb building file list ... done deleting archive/newfile archive/
Notice the "deleting archive/newfile" message that appears in our verbose output. If you want your rsync operation to use the local system as the content authority and make sure that the remote copy looks exactly the same as the original one, --delete is the option to use.
Next, we see the bytes transferred statistic and a very modest speedup.
sent 136 bytes received 26 bytes 64.80 bytes/sec total size is 1170 speedup is 7.22
And, as you'd expect, the new file that somehow snuck into the remote system's archive directory is now gone.
dest$ ls archive try1 tryme tryme1 tryme2
In addition, were we to examine the files on both systems, the ownership and permissions would be the same because we are making use of the -a (archive) option that ensure this is the case.
To replicate or not
If, instead, we want to maintain whichever files in the two archive directories are the newest, there are options for that as well.
The --existing option tells rsync to only update files that already exist on the remote system and not to create new files. Notice in the example below that newfile2 is not replicated.
orig$ echo hello > archive/newfile2 orig$ rsync -av archive --existing sea-aveksa-1:~shs building file list ... done archive/ sent 163 bytes received 26 bytes 126.00 bytes/sec total size is 1176 speedup is 6.22
We might also want to tell rsync not to touch files that are newer on the destination side. To demonstrate how this works, we first create a new file called "newfile" on the destination server.
dest$ echo "don't touch that" > archive/newfile2
Sign up for CIO Asia eNewsletters.