如何获取在针对主机的单个 rsync 中调用的所有 rsync 参数?

How can I get all rsync parameters called in a single rsync against a host?

我正在尝试解析当 rsync 运行 针对主机时传递的参数。因此,如果我通过了 --delete --prune-empty-dirs--timeout=60,我想知道这一点。我知道我可以在我的 rsyncd.conf 文件中使用 pre-xfer exec,它允许我将参数传递给另一个脚本(例如:$RSYNC_ARG0,$RSYNC_ARG1,...$RSYNC_ARGN)。我遇到的问题是其中一些作为实际参数返回:

bwlimit=100000

delete

但其他人以奇怪的字符串形式返回:

vOtre.iLsf

有什么方法可以解析这些字符串以确定 arguments/parameters 传递了什么?这些是我传递给同步主机的参数:

--recursive --times --omit-dir-times --timeout=15 --bwlimit=100000 --port=38700 --quiet --exclude='string1' --exclude='string2' --exclude='string3' --exclude='string4' --exclude='string5' --exclude='string6' --exclude='string7' --timeout=60 --delete --prune-empty-dirs

这些是我在 pre-xfer exec 中得到的参数(逗号分隔):

server,mOtre.isf,timeout=60,bwlimit=100000,delete

如有任何帮助,我们将不胜感激。

我不知道这是否重要,但我正在从 Linux 盒子同步到 Windows 盒子上的 cygwin 中的 rsync。我假设 parameters/arguments/values 是相同的,但我认为值得注意。

编辑 mOtr 代表 --prune-empty-dirs --omit-dir-times --times --recursive,但我不知道 . 后面的任何内容...

在服务器端,您不会直接看到提供给客户端命令的选项。客户端命令解析您的选项,然后生成一组选项以传递给服务器 rsync 进程。

服务器只获取它需要知道的选项来完成它的一部分。例如,排除选项是文件选择过程的一部分,它通过双方网络连接上的 rsync 协议执行。它不会通过命令行传递到服务器端。

随机字符的 blob 是在客户端构建的字符串,它具有服务器需要了解的一组编码标志。其中一些与 rsync 命令行上的短选项具有相同的含义(如您所猜),但其他具有不同的含义或者是服务器操作所特有的。 (下载源码看看options.c里面的函数'server_options'就知道了)

不幸的是,如果您想根据传递给客户端命令的确切命令行做出决定,您可能就不走运了。但是,其他环境变量和 RSYNC_ARG 中传递的内容可能有足够的信息,仍然可以执行您需要的操作。

如果您的目标是通过让 pre-xfer 脚本失败来阻止某些活动,您也可以通过在 rsyncd.conf

中设置其他限制和约束来实现某些目的

祝你好运!