我在远程计算机上有以下目录结构
ALLLibs/LibA/LibA.1
ALLLibs/LibA/LibA.2
ALLLibs/LibB/LibB.1
ALLLibs/LibB/LibB.4
说明 LibA.1 和 LibA.2 是一个目录的版本,这两个文件夹的内容可能几乎相同,并且可以有更多这样的文件夹。
我要同步所有库到我的另一台网络太慢的机器。并且唯一可用的选项是通过网络
我知道rsync
最适合同步文件,但我相信它可以对文件进行 1-1 映射并同步它们。
我的一个用例是, ALLLibs/LibA/LibA.1
如果已经在我的另一台机器上同步,然后ALLLibs/LibA/LibA.2
在远程创建,我希望通过前一个库的补丁进行同步。
答案1
确保您使用 rsync-z
通过网络进行压缩。其他要考虑的选项是-H
(硬链接)和-S
(稀疏文件)。
在运行 rsync 之前,请执行一个-nv
不更新但显示哪些文件将被更新的版本。
在文件列表中,使用您的知识来匹配远程设备上可能已存在丢失文件的位置,然后登录到远程设备并首先复制这些文件。
例如,-nv
可能会显示以下所需的更新:
ALLLibs/LibA/LibA.2
ALLLibs/LibA/LibA.2/file1
但如果您知道它可能是 的副本../LibA.1/file1
,则编写一个脚本来创建并从 LibA.1 填充 LibA.2,然后在远程运行它。它可以像这样简单cp -rp
。当你进行真正的rsync时,类似的文件已经存在,并且更改的文件将被更新。您将需要--delete
删除不应该存在的文件(请小心此选项:-n
首先进行测试)。
在远程复制命令时要小心:复制文件通常会在新文件上设置新的时间戳。 rsync 默认情况下会比较大小和时间戳。如果它们不同,该文件将被更新。使用 rsync 选项-c
对每个文件进行校验和以查看其是否不同。