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

时间:2015-02-03 22:09:10

标签: parameters cygwin arguments rsync

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

bwlimit=100000

delete

但其他人回来的时候很奇怪:

vOtre.iLsf

有没有办法解析这些字符串以确定传递了哪些参数/参数?这些是我传递给同步主机的参数:

--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

非常感谢任何帮助。

我不知道这是否重要,但我在Windows机顶盒上从Linux机器同步到cygwin中的rsync。我会假设参数/参数/值是相同的,但我认为值得注意。

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

1 个答案:

答案 0 :(得分:1)

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

服务器只获取它需要了解的选项。例如,exclude选项是文件选择过程的一部分,该过程通过双方之间的网络连接上的rsync协议执行。它不会通过命令行传递到服务器端。

随机字符的blob是在客户端上构建的字符串,其具有服务器需要知道的编码标志集。其中一些与rsync命令行中的短选项具有相同的含义(如您所猜测的那样),但其他选项具有不同的含义或对于服务器的操作是唯一的。 (如果您下载源代码,可以查看options.c中的函数' server_options')

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

如果您的目标是通过让pre-xfer脚本失败来阻止某些活动,您也可以通过在rsyncd.conf中设置其他限制和限制来执行其中一些操作

祝你好运!