来自groovy的rsync:“ - e”arg导致“unknown remote arg”错误

时间:2016-03-14 12:23:30

标签: bash groovy rsync

关于rsync调用的问题并不缺,但我没有看到任何有用的内容,所以这是我正在努力的命令:

$ rsync -av -e 'ssh -i key.id_dsa -l root' root@server:/dir/file /tmp/file

它适用于bash。我使用String.execute()方法从Groovy代码调用它,它失败如下:

command exit code: 1
rsync command output:

rsync command error output:
Unexpected remote arg: root@server:/dir/file
rsync error: syntax or usage error (code 1) at main.c(1348) [sender=3.1.0]

显然,-e开关及其值是问题:rsync -av -r --progress root@server:/dir/file /tmp/file之类的命令可以完美运行。

问题0:为什么-e参数特殊?

问题1:如何使其发挥作用?

1 个答案:

答案 0 :(得分:1)

我猜测-e开关是bash shell所需要的东西...所以要调用后面带有bash shell的命令,你需要使用List表单像execute那样:

["bash", "-c", "rsync -av -e 'ssh -i key.id_dsa -l root' root@server:/dir/file /tmp/file"].execute()

这应该让它运行(我总是使用这种形式,因为它似乎总是比String.execute()形式更不容易出错)