无法从java执行rsync

时间:2013-12-21 08:40:40

标签: java linux ssh 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

如果我直接在cmd上尝试ternimal值,它就可以了。

代码有什么问题?


被修改

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 现在可能出现了什么问题

1 个答案:

答案 0 :(得分:2)

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

您需要使用exec {{1}},它采用字符串数组,其中数组中的每个元素都是参数之一。

如果确实如此,这个问题与this flavor(你可以看到一个例子)

重复