乏关于 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:如何使其工作?
我猜-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()
形式更不容易出错)