我正在使用台式计算机上的一些源文件。源文件在远程服务器上编译并运行。
由于我和服务器之间存在相当大的延迟,我决定使用rsync
将文件复制到我的计算机,编辑它们,然后再次使用将它们同步回来rsync
。
但是有一个问题...rsync
当我在我这边编辑完文件后将它们同步回服务器时,文件并没有更新。增量文件列表已发送,但文件内容未经修改。
这是我的 bash 会话的完整输出,它将详细解释发生的情况。
- 我的本地机器上有一些文件。我使用 等编辑器编辑其中一个文件
vim
。文件结构相当通用。我有一个名为 的项目根目录2016-07-01
,其中包含许多子文件夹和源文件。该文件夹仅以日期命名,作为版本控制的方法。
(重击)
$ 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
,我发现它没有变化。为什么会发生这种情况?然后我再次运行相同的命令并产生以下输出......
(重击)
$ 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
标志来表示校验和而不是日期时间戳,再次看到了相同的结果。
答案1
简而言之,这是不是正确的命令...
$ rsync -av ./2016-07-01 user@server:./path-to-project/2016-07-01
这是正确的命令...
$ rsync -av ./2016-07-01 user@server:./path-to-project
笔记,目标没有正斜杠或目录名称- 当这些被忽略时,rsync
将根据需要创建目录。我认为/
和2016-07-01
意味着应该做两件不同的事情。不/
意味着创建目录。我不确定2016-07-01
如果添加/删除会产生什么效果/
是那里。也许有人可以澄清这一点。
还要注意,有 3 种方法可以寻址远程服务器上的目的地。
使用上述方法,地址以 开头
.
。rsync 命令默认为用户主目录,因此这个到主目录的相对路径是有效的。你也可以从根目录输入完整的绝对路径。对我来说,这类似于
/afs/servername/u/username/rest_of_path_from_home_dir
最后,使用
~
扩展作为上述操作的快捷方式也将起作用。