使用java的processbuilder调用pscp时,如何遍历父目录?

efzxgjgh  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(415)

我使用以下代码从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不传输文件?
update:on further 调查和感谢@martin prikryl,我能够把这个问题缩小到根本原因。
根本原因:问题是当用户连接从pscp建立时,它默认连接到 (root)/home/username .
我们需要遍历的目录位于

(root)/www/....lengthy/folder/here .

剩余问题:
连接后,我正在尝试向上遍历文件夹。我试图添加一个双周期,以便在提供路径之前向上遍历根。但它不起作用。
我正在尝试将pscp作为远程主机名:

../../www/..lengthy/folder/here

但是,当通过java执行时,由于某些奇怪的原因,它失败了,但是可以通过cmd提示符工作。
在包含实际路径之前,如何添加包含第二个父级的远程路径?

vd8tlhqk

vd8tlhqk1#

当您使用java+pscp时,似乎有一些限制。我通过将文件上传到默认目录来解决这个问题。之后,我通过putty的命令行建立连接,并将文件传输到所需的目标。我把答案放在这里。

相关问题