
要將檔案從 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/'
注意&
\
之間有一個空格,這樣就可以了test
folder
test\ folder
。也許你的情況是這樣的
need to escape twice
因為它首先在本地轉義,然後在遠端轉義。在這種情況下你可以這樣寫:"'complete argument'"
雙引號內的引號如下:"'[email protected]:/C:/Users/user.name/test folder/'"
或者
轉義空格並引用完整的論點,如下:
'[email protected]:/C:/Users/user.name/test\ folder/'
或者
像這樣使用轉義序列直接轉義兩次
[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'