繁体   English   中英

使用 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 的命令行建立连接并将文件传输到所需的目的地。 我把我的答案放在这里。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM