簡體   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