scp 從遠端 Linux 到本機 Windows,本機路徑包含空格

scp 從遠端 Linux 到本機 Windows,本機路徑包含空格

要將檔案從 Linux 終端推送到 Windows 系統,以下兩個範例就可以正常運作。

scp /home/user.name/file.html [email protected]:/C:/Users/user.name/test_folder/file.html

scp /home/user.name/file.html [email protected]:"/C:/Users/user.name/test_folder/file.html"

我需要在本機資料夾有空格並且無法更改名稱的情況下執行此操作,例如/C:/Users/user.name/test folder/

以下所有操作均失敗並顯示訊息scp: ambiguous target

scp /home/user.name/file.html [email protected]:"/C:/Users/user.name/test folder/file.html"

scp /home/user.name/file.html [email protected]:"/C:/Users/user.name/test\ folder/file.html"

scp /home/user.name/file.html [email protected]:"'/C:/Users/user.name/test\ folder/file.html'"

scp /home/user.name/file.html [email protected]:"/C:/Users/user.name/test\\ folder/file.html"

scp /home/user.name/file.html [email protected]:"'/C:/Users/user.name/test\\ folder/file.html'"

scp /home/user.name/file.html [email protected]:"/C:/Users/user.name/test\\\ folder/file.html"

scp /home/user.name/file.html [email protected]:"'/C:/Users/user.name/test\\\ folder/file.html'"

我該如何讓它發揮作用?

答案1

  • 嘗試使用quotes '或者Double quotes "圍繞著完整的論證。

    正如 @dirkt 在評論中所建議的,引用 ssh 主機的完整路徑參數應該可以完成這項工作。這使得你的命令像這樣:

    scp /home/user.name/file.html '[email protected]:/C:/Users/user.name/test folder/'
    
  • 使用escape sequence for space在資料夾名稱之間。

    您可以使用\(帶有空格的反斜線)作為空格的轉義序列。這使得你的命令像這樣:

    scp /home/user.name/file.html '[email protected]:/C:/Users/user.name/test\ folder/'
    

    注意&\之間有一個空格,這樣就可以了testfoldertest\ folder

  • 也許你的情況是這樣的need to escape twice因為它首先在本地轉義,然後在遠端轉義。在這種情況下你可以這樣寫:

    1. "'complete argument'"雙引號內的引號如下:

      "'[email protected]:/C:/Users/user.name/test folder/'"
      

      或者

    2. 轉義空格並引用完整的論點,如下:

      '[email protected]:/C:/Users/user.name/test\ folder/'
      

      或者

    3. 像這樣使用轉義序列直接轉義兩次

      [email protected]:/C:/Users/user.name/test\\ folder/
      

請隨意添加更多詳細資訊。

答案2

嘗試了上述所有選項以從 CentOS 用戶端 scp 到 Windows 7 (SP1),但沒有成功。

但這對我有用:

$ scp /tmp/lala 'win7@<IP>:"/Users/win7/Documents/TestComplete 14 Projects"'

答案3

我不知道這是否仍然相關,但一種解決方案(在某些情況下可能會適得其反)是使用“?”而不是空間:

scp "user@ip:/home/user/file?with?spaces.txt" .

答案4

符號由 bash 本身解釋。如果可以的話,Bash 會解封裝跨結構之間的任何內容,並且僅將輸出呈現給被呼叫的命令,該命令作為可能具有一些特殊符號的字串。試試使用撇號 (') 符號,它強制 bash 根本不查看字串,而只是將其傳遞給首先調用的命令。那些字串與'格式應該是這樣的:如果你想看

echo $'dont\'t'

相關內容