0

Apache Commons API を使用してコピー コマンドを実行しようとしています。以下は私の努力です:

   String privateKey = "/Users/TD/.ssh/id_rsa";
    String currentFile = "/Users/TD/One.txt";
    String target = "root@my.server.com:";

    // Space is present in destination
    String destination="/Leo/Ta/San Diego";

    CommandLine commandLine = new CommandLine("scp");
    commandLine.addArgument("-i");
    commandLine.addArgument(privateKey);
    commandLine.addArgument(currentFile);
    commandLine.addArgument(target + destination);

    System.out.println(commandLine.toString());
    DefaultExecutor executor = new DefaultExecutor();
    executor.setExitValue(0);
    executor.execute(commandLine);

出力:

scp -i /Users/TD/.ssh/id_rsa /Users/TD/One.txt "root@my.server.com:/Leo/Ta/San Diego"

org.apache.commons.exec.ExecuteException: プロセスがエラーで終了しました: 1 (終了値: 1)

同じプログラムは、宛先フォルダーにスペースがなくても問題なく動作します。

String destination="/Leo/Ta/SanJose";

scp -i /Users/TD/.ssh/id_rsa /Users/TD/One.txt root@my.server.com:/Leo/Ta/SanJose

4

2 に答える 2

0

コマンド文字列を構築する代わりに、CommandLine のaddArgumentメソッドを使用します。これにより、コマンドが構文的に正しいことが保証されます。

次のコードはそれを示しています。

    CommandLine commandLine = new CommandLine("scp");
    commandLine.addArgument("-i", false);
    commandLine.addArgument(privateKey, false);
    commandLine.addArgument(currentFile, false);
    commandLine.addArgument(target + destination, false);
于 2015-08-26T04:15:17.653 に答える