我正在使用台式电脑的一些源文件。 源文件编译并在远程服务器上运行。
由于我和服务器之间有很大的延迟,我决定使用rsync将这些文件复制到我的电脑,编辑它们,然后再次使用rsync同步它们。
但是,有一个问题… rsync不会更新文件,当我在我的最后编辑它们后同步备份到服务器。 增量文件列表已发送,但文件内容未修改。
这里是我的bash会议的完整输出,将详细解释发生了什么。
vim等编辑器编辑其中的一个文件。 文件结构相当通用。 我有一个名为2016-07-01的项目根目录,其中包含许多子文件夹和源文件。 该文件夹刚刚以date的forms命名为版本控制的一种方法。 (bash)的
$ rsync -av ./2016-07-01 user@server:./path-to-project/2016-07-01 user@server's password: [enter password] sending incremental file list 2016-07-01/subfolder/ 2016-07-01/subfolder/main.cpp sent 2,238 bytes received 272 bytes 557.78 bytes/sec total size is 632,957 speedup is 252.17
它看起来像main.cpp已经更新,但是当我ssh进入服务器,并用vim打开它,我看到它没有改变。 为什么发生这种情况?
然后我再次运行相同的命令,并产生以下输出…
(bash)的
$ 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
这次没有发送增量文件列表 – 我不知道为什么 – 这就好像rsync认为它已经更新了文件,因此什么也没做,当它没有…
如果我检查main.cpp在我的结尾肯定已经改变。
服务器端的main.cpp不变。
我也尝试使用-c标志作为校验和而不是date – 时间戳,再次看到相同的结果。
总之,这不是正确的命令…
$ rsync -av ./2016-07-01 user@server:./path-to-project/2016-07-01
这是正确的命令…
$ rsync -av ./2016-07-01 user@server:./path-to-project
请注意,目标没有正斜杠或目录名称 – 当这些名称不存在时, rsync将根据需要创build目录。 我认为/和2016-07-01意味着应该做2个不同的事情。 没有/意味着创build目录。 我不确定添加/删除2016-07-01的效果是否在/有。 也许有人可以澄清这一点。
另请注意,在远程服务器上有三种寻址方式。
用上面的方法用地址开始. 。 rsync命令默认为用户主目录,所以这个主目录的相对path起作用。
也可以从根目录input完整的绝对path。 对我来说,这是像/afs/servername/u/username/rest_of_path_from_home_dir
最后,使用~扩展作为上述的捷径也将起作用。