我正在研究使用 rsync 在 Windows 中同步远程和本地文件夹(使用 cwrsync)。我有一个疑问,是否可以只上传部分更改?
例如,我有一个 100 MB 的文件,最初我将使用命令上传它,
rsync -a /source/path/ /dest/path/
然后我将对该文件进行一些更改。如果我再次运行相同的命令,整个 100 MB 文件将再次上传。相反,如何在上传时附加对该文件所做的更改?
答案1
您需要的是--inplace
选项。
我强烈建议你阅读相关部分rsync 手册并理解这个选项的含义:
- 到位当文件数据需要更新时,此选项会改变 rsync 传输文件的方式:rsync 不会采用默认方法,即创建文件的新副本并在完成后将其移动到位,而是将更新的数据直接写入目标文件。
这有几个效果:
- 硬链接不会中断。这意味着新数据将通过指向目标文件的其他硬链接可见。此外,尝试将不同的源文件复制到多重链接的目标文件将导致“拉锯战”,目标数据会来回更改。
- 正在使用的二进制文件无法更新(要么操作系统会阻止这种情况发生,要么试图交换其数据的二进制文件会出现异常或崩溃)。
- 在传输过程中,文件的数据将处于不一致状态,并且如果传输中断或更新失败,文件的数据将保持这种状态。
- rsync 无法写入的文件无法更新。超级用户可以更新任何文件,而普通用户需要被授予写入权限才能成功打开文件进行写入。
- 如果目标文件中的某些数据在复制到文件后面的位置之前被覆盖,则 rsync 增量传输算法的效率可能会降低。如果您使用 --备份,因为 rsync 足够智能,可以使用备份文件作为传输的基础文件。
警告:您不应使用此选项来更新其他人正在访问的文件,因此在选择使用此选项进行复制时要小心。
此选项对于传输包含基于块的更改或附加数据的大型文件非常有用,并且对于受磁盘限制而非网络限制的系统也非常有用。它还可以帮助防止写时复制文件系统快照分散仅有微小更改的文件的全部内容。
该选项意味着- 部分的(因为中断传输不会删除文件),但与--部分目录和 --延迟更新. rsync 2.6.4 之前的版本- 到位也不兼容--比较目标和--link-目标。
您可能还对仅增长文件的选项--append
感兴趣。--append-verify
答案2
您正在使用 rsync 从一个目录复制到另一个目录 - 选项--整个文件则生效:
-W, --整个文件使用此选项时,不使用 rsync 的增量传输算法,而是按原样发送整个文件。当源计算机和目标计算机之间的带宽高于磁盘带宽时(尤其是当“磁盘”实际上是网络文件系统时),如果使用此选项,传输可能会更快。当源和目标都指定为本地路径时,这是默认设置,但前提是没有批量写入选项生效。
您需要在守护进程模式下启动 rsync 来触发具有增量传输的 rsync 算法。