这是rsync手册页中有关批处理模式的信息。
批处理模式
批处理模式可用于将同一组更新应用于许多相同的系统。假设其中有一棵在多个主机上复制的树。现在假设对该源树进行了一些更改,并且这些更改需要传播到其他主机。为了使用批处理模式执行此操作,rsync与write-batch选项一起运行,以将对源树所做的更改应用于目标树之一。write-batch选项使rsync客户端在“批处理文件”中存储针对其他相同的目标树重复此操作所需的所有信息。
一次生成批处理文件省去了更新多个目标树时必须多次执行文件状态,校验和和数据块生成的麻烦。组播传输协议可用于一次将批量更新文件并行传输到许多主机,而不是将相同的数据分别发送到每个主机。
要将记录的更改应用于另一个目标树,请使用read-batch选项运行rsync,指定同一批处理文件的名称以及目标树。Rsync使用存储在批处理文件中的信息更新目标树。
为了方便起见,在使用write-batch选项时也会创建一个脚本文件:该脚本文件的名称与添加了“ .sh”的批处理文件的名称相同。该脚本文件包含适用于使用关联的批处理文件更新目标树的命令行。可以使用Bourne(或类似Bourne)外壳执行该操作,可以选择传入替代的目标树路径名,然后使用该路径名代替原始目标路径。当当前主机上的目标树路径不同于用于创建批处理文件的路径时,此功能很有用。
Examples:
$ rsync --write-batch=foo -a host:/source/dir/ /adest/dir/
$ scp foo* remote:
$ ssh remote ./foo.sh /bdest/dir/
$ rsync --write-batch=foo -a /source/dir/ /adest/dir/
$ ssh remote rsync --read-batch=- -a /bdest/dir/ <foo
在这些示例中,rsync用于从/ source / dir /更新/ adest / dir /,并将重复此操作的信息存储在“ foo”和“ foo.sh”中。然后使用进入目录/ bdest / dir的批处理数据来更新主机“远程”。这两个示例之间的差异揭示了您在处理批处理方面的灵活性:
第一个示例表明初始副本不必是本地的-您可以根据需要使用remote-shell语法或rsync守护程序语法将数据推送到远程主机或从远程主机拉出数据。
第一个示例在远程主机上运行read-batch命令时,使用创建的“ foo.sh”文件获取正确的rsync选项。
第二个示例通过标准输入读取批处理数据,因此不需要先将批处理文件复制到远程计算机。本示例避免使用foo.sh脚本,因为它需要使用修改后的--read-batch选项,但是如果希望使用它,则可以编辑脚本文件(请确保没有其他选项尝试使用standard输入,例如“ --exclude-from =-”选项)。
注意事项:
read-batch选项期望要更新的目标树与用于创建批处理更新文件集的目标树相同。当目标树之间出现差异时,更新可能会被警告并丢弃(如果文件似乎已经是最新的),或者尝试进行文件更新,然后如果文件未能通过验证,该更新因错误而被丢弃。这意味着如果命令被中断,重新运行分批读取操作应该是安全的。如果您希望无论文件的大小和日期如何都强制执行批量更新,请使用-I选项(读取批处理时)。如果发生错误,则目标树可能处于部分更新的状态。在这种情况下,
所有目标上使用的rsync版本必须至少与用于生成批处理文件的版本一样新。如果批处理文件中的协议版本太新而无法读取批处理的rsync,则Rsync会死于错误。另请参阅--protocol选项,以获取使创建rsync生成较旧rsync可以理解的批处理文件的方法。(请注意,批处理文件在版本2.6.3中已更改格式,因此将旧版本与新版本混合使用将不起作用。)
读取批处理文件时,如果未将某些选项的值设置为与batch-write命令相同,则rsync将强制某些选项的值与批处理文件中的数据匹配。其他选项可以(并且应该)更改。例如,将--write-batch更改为--read-batch,将删除--files-from,并且除非指定了--delete选项之一,否则不需要--filter /-include /-exclude选项。 。
创建BATCH.sh文件的代码将所有filter / include / exclude选项转换为单个列表,该列表作为“此处”文档附加到外壳脚本文件中。如果需要更改--delete删除的内容,高级用户可以使用它来修改排除列表。普通用户可以忽略此详细信息,而只是使用shell脚本作为对批处理数据运行适当的--read-batch命令的简便方法。
rsync中的原始批处理模式基于“ rsync +”,但最新版本使用新的实现。
我想你可以尝试
rsync --write-batch=foo -Pav /junk user@host1:/backup
foo.sh user@host2:/backup
foo.sh user@host3:/backup
remote destination is not allowed with --read-batch