不能从java执行rsync

Process p; String cmd = "rsync --timeout=20 -v -r -E -e \"ssh -o StrictHostKeyChecking=no -i " + "/usr/local/my.pem\"" + " root@<IP>:/usr/local/test/ /other/test"; try { p = Runtime.getRuntime().exec(cmd); System.out.println("going to exec1"); int val = p.waitFor(); } 

当我尝试上面的代码, rsync不起作用, val = 1

而如果我尝试直接在ternimal cmd值,它工作正常。

代码有什么问题?


编辑

 String[] cmd = new String[]{"rsync", "--timeout=20", "-v", "-r", "-a", "-E", "-e", "\"ssh -o StrictHostKeyChecking=no -i " + "/usr/local/my.pem" + "\"", "root" + "@" + "198.168.1.3" + ":" + "/usr/local/test1" , "/usr/local" + "/" + "test1"}; try { p = Runtime.getRuntime().exec(cmd); System.out.println("going to exec1"); int val = p.waitFor(); } 

这次val = 12现在可能是错的

您需要使用不同版本的exec ,因为您使用的版本假定命令是整个字符串。

你需要使用这种 exec 风格 ,它接受一个字符串数组,其中数组中的每个元素是其中的一个参数。

如果事实上,这个问题是如何执行命令与参数的副本? (你可以看到一个例子)