I am working with some source files from a desktop computer. The source files compile and run on a remote server.

As there is a significant delay between me and the server, I have decided to use rsync to copy the files down to my computer, edit them, and then sync them back up, again using rsync.

However there is a problem... rsync doesn't update the files when I sync them back up to the server after editing them at my end. The incremental file list is sent, but the file contents are unmodified.

Here is a full output of my bash session which will explain in detail what happens.

  • I have some files on my local machine. I edit one of those files, using an editor such as vim. The file structure is fairly generic. I have a project root directory called 2016-07-01, which contains many subfolders and source files. The folder is just named with the date as a method of version control.


$ rsync -av ./2016-07-01 user@server:./path-to-project/2016-07-01
user@server's password: [enter password] 
sending incremental file list

sent 2,238 bytes  received 272 bytes  557.78 bytes/sec
total size is 632,957  speedup is 252.17
  • It looks like main.cpp has been updated, but when I ssh into the server and open it with vim I see that it is unchanged. Why is this happening?

  • I then run the same command again and the following output is produced...


$ rsync -av ./2016-07-01 user@server:./path-to-project/2016-07-01
user@server's password: [enter password] 
sending incremental file list

sent 1,342 bytes  received 36 bytes  110.24 bytes/sec
total size is 632,957  speedup is 459.33
  • This time no incremental file list is sent - I am not sure why - it is as if rsync thinks it has updated the files already and therefore does nothing when it has not...

  • If I check main.cpp at my end it has definitely been changed.

  • main.cpp on the server side is unchanged.

I have also tried using the -c flag for checksums rather than date-time-stamps, again the same result is seen.

  • You are rsyncing to "user's" ~/path-to-project/2016-07-01. Is that where you are looking when you ssh to the server and open the file? – JasonAzze Jul 8 '16 at 20:28
  • @JasonAzze It is not. How can I get the '~' for "user" on the SERVER side? – user3728501 Jul 8 '16 at 20:43

In short, this is not the correct command...

$ rsync -av ./2016-07-01 user@server:./path-to-project/2016-07-01

This is the correct command...

$ rsync -av ./2016-07-01 user@server:./path-to-project

Note, no forward slash or directory name for destination - when these are left off rsync will create the directory as required. I think the / and 2016-07-01 imply 2 different things should be done. No / means create directory. I am not sure what the effect of adding/removing the 2016-07-01 is if the / is there. Perhaps someone can clarify this.

Also note there are 3 ways of addressing the destination on the remote server.

  • Using the above method starting the address with .. The rsync command defaults to the users home directory, so this relative path to the home directory works.

  • One can also type out the full absolute path from the root directory. For me this is something like /afs/servername/u/username/rest_of_path_from_home_dir

  • Finally, using the ~ expansion as a shortcut for the above will also work.

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.