使用 Java 的 ProcessBuilder 调用 PSCP 时如何遍历到父目录?
How can I traverse to parent directory when calling PSCP using Java's ProcessBuilder?
我正在使用以下代码从 Java 调用 pscp:
public static ArrayList<String> runWindowsCommand(String... args) throws WindowsCmdFault {
try {
ProcessBuilder pb = new ProcessBuilder(args);
Process p = pb.start();
//...
//... code to fetch the output and return it back
}catch (IOException | InterruptedException e) {
e.printStackTrace();
}
}
我调用这个函数如下:
runWindowsCommand("C:\Program Files (x86)\PuTTY\pscp" -pw "password" -r folder/file_to_be_transferred.txt "username@hostname:/remote/unix/server/location/folder_name")
这执行得很好并显示以下输出:
Arraylist returned (output) =
[, file_to_be_transferred.txt | 3 kB | 2.7 kB/s | ETA: 00:00:00 | 100%]
看来转移成功了。除了当我通过 putty 登录到远程 unix 服务器并检查该文件时,它显示没有任何更新。
文件权限设置为666.
当我直接在 cmd 提示符 上执行相同的命令(我们发送给函数)时,它给出相同的输出并且文件是 其实转了。
当我 运行 通过上面给出的 Java 代码执行相同的命令时,文件实际上并未传输。
为什么 PSCP 不传输文件?
更新:经过进一步调查并非常感谢@Martin Prikryl,我能够将这个问题缩小到根本原因。
根本原因:
问题是,当从 PSCP 建立用户连接时,它默认连接到
(root)/home/username
.
我们需要遍历的目录位于
(root)/www/....lengthy/folder/here .
剩余问题:
我试图在连接后向上遍历文件夹。我正在尝试添加一个双周期,以便在提供我的路径之前向上遍历根。但是没用。
我正在尝试使用 pscp 作为远程主机名:
../../www/..lengthy/folder/here
但是当通过 Java 执行时由于一些奇怪的原因失败了但是通过 cmd 提示符工作。
如何在包含我的实际路径之前添加包含第二个父级的远程路径?
使用Java + PSCP 似乎有一些限制。我通过将文件上传到默认目录解决了这个问题。之后,我通过 putty 的 command-line 建立连接并将文件传输到所需的目的地。我把我的答案放在这里。
我正在使用以下代码从 Java 调用 pscp:
public static ArrayList<String> runWindowsCommand(String... args) throws WindowsCmdFault {
try {
ProcessBuilder pb = new ProcessBuilder(args);
Process p = pb.start();
//...
//... code to fetch the output and return it back
}catch (IOException | InterruptedException e) {
e.printStackTrace();
}
}
我调用这个函数如下:
runWindowsCommand("C:\Program Files (x86)\PuTTY\pscp" -pw "password" -r folder/file_to_be_transferred.txt "username@hostname:/remote/unix/server/location/folder_name")
这执行得很好并显示以下输出:
Arraylist returned (output) =
[, file_to_be_transferred.txt | 3 kB | 2.7 kB/s | ETA: 00:00:00 | 100%]
看来转移成功了。除了当我通过 putty 登录到远程 unix 服务器并检查该文件时,它显示没有任何更新。
文件权限设置为666.
当我直接在 cmd 提示符 上执行相同的命令(我们发送给函数)时,它给出相同的输出并且文件是 其实转了。
当我 运行 通过上面给出的 Java 代码执行相同的命令时,文件实际上并未传输。
为什么 PSCP 不传输文件?
更新:经过进一步调查并非常感谢@Martin Prikryl,我能够将这个问题缩小到根本原因。
根本原因:
问题是,当从 PSCP 建立用户连接时,它默认连接到
(root)/home/username
.
我们需要遍历的目录位于
(root)/www/....lengthy/folder/here .
剩余问题:
我试图在连接后向上遍历文件夹。我正在尝试添加一个双周期,以便在提供我的路径之前向上遍历根。但是没用。
我正在尝试使用 pscp 作为远程主机名:
../../www/..lengthy/folder/here
但是当通过 Java 执行时由于一些奇怪的原因失败了但是通过 cmd 提示符工作。
如何在包含我的实际路径之前添加包含第二个父级的远程路径?
使用Java + PSCP 似乎有一些限制。我通过将文件上传到默认目录解决了这个问题。之后,我通过 putty 的 command-line 建立连接并将文件传输到所需的目的地。我把我的答案放在这里。