我有一个客户端与rsync 一起使用的备份服务器通过 SSH。服务器被配置为运行一个自定义的 shell 脚本,该脚本包装了 rsync 服务器端的调用。客户端不知道这一点,可以发出任何有效的 rsync 命令行。
我想将客户端的一些参数传递到该 shell 脚本中。就像是
$ rsync -av -customarg1 value1 -customarg2 value2 file1 file2 user@server
Run Code Online (Sandbox Code Playgroud)
客户端rsync拒绝任何它不知道的参数,就像ssh(via rsync -e) 一样。我想出的最好方法是将参数作为假的服务器端文件规范传递,脚本在执行它以启动 rsync 服务器之前从服务器端命令行中提取这些规范。即像这样的命令
$ rsync -av file1 file2 user@server:some/path\;customarg1=value1\;customarg2=value2
Run Code Online (Sandbox Code Playgroud)
将提供两个参数,然后表现得好像命令是
$ rsync -av file1 file2 user@server:some/path
Run Code Online (Sandbox Code Playgroud)
(这使用 SSH 设置许多环境变量的事实,包括$SSH_ORIGINAL_COMMAND其中包含 ssh 客户端发出的命令(即 rsync 客户端启动的 rsync 服务器命令),而不管 ssh 服务器配置为执行什么(即自定义 shell脚本))
也许您可以使用-M选项(长版--remote-option),客户端 rsync 似乎没有检查该选项。-M-xxxx被传递到遥控器,-M剥离为-xxxx。您可以使用 轻松地玩这个-M-M-xxxx,它被客户端和远程忽略:
rsync -av -M-M-myvar=val /tmp/test/ remote:test/
Run Code Online (Sandbox Code Playgroud)
如果您的服务器前端在调用 rsync 之前识别并删除生成的标志,则您将获得所需的信息。
您可以进一步玩,--rsync-path它允许您运行任何脚本。它将连接远程参数。例如
rsync -a -M-myvar=val --rsync-path='echo hello >/tmp/out; ./mysync' /tmp/test/ remote:test/
Run Code Online (Sandbox Code Playgroud)
将在遥控器上运行类似
echo hello >/tmp/out
./mysync --server -logDtpre.iLsfx -myvar=val . test/
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1780 次 |
| 最近记录: |