2015-11-10 86 views
1

是的,我不知道它已被要求的千倍如何逃生空間在SCP,但我不能這樣做與& - 符號,因此,如果這標誌是部分目錄名稱。如何逃生和在SCP

[[email protected] tmp]$ scp test.txt "bpi:/home/sorunome/test & stuff" 
zsh:1: command not found: stuff 
lost connection 

的&跡象似乎搞亂的東西相當多了,使用\ &不能解決的則遠程目錄中找不到問題:通過省略

[[email protected] tmp]$ scp test.txt "bpi:/home/sorunome/test \& stuff" 
scp: ambiguous target 

甚至不引用和加\這個工作的地方:

[[email protected] tmp]$ scp test.txt bpi:/home/sorunome/test\ \&\ stuff 
zsh:1: command not found: stuff 
lost connection 

那麼,有什麼想法嗎?

+0

必須使用的zsh?我在bash下試了一下,它沒有任何額外的轉義。 – Aaron

+0

不,我不必使用zsh,我只是用bash試過它,並且它產生相同的效果(而不是它說「zsh:1」它現在說「bash」) 另外,只是爲了如此感興趣只是試過'scp test.txt「bpi:/ home/sorunome/test&touch test.tmp」' ,它確實在我的遠程家庭中創建了test.tmp文件! – Sorunome

+0

是的,我實際上已經在本地測試'&',當在遠程端測試時,我重現了你的錯誤。我正在尋找一種方法來避免它 – Aaron

回答

3

逃離兩空間和符號的伎倆對我來說:仍然需要某種原因

scp source_file "[email protected]:/dir\ with\ spaces\ \&\ ampersand" 

的報價。

+0

奇怪,這似乎是工作!但是,如何將它添加到bash腳本中的變量? – Sorunome

+0

這似乎是這樣做的:'scp'$(sprintf%q「$ local」)「」$(sprintf%q「$ remote」)「' – Sorunome

+1

需要引號來保護反斜槓本身。 'scp'有點棘手,因爲參數會被處理兩次:在運行'scp'之前由本地shell執行一次,並且在文件名被髮送到遠程主機之後再次執行*。 (這可能有助於將'scp'想象成一個類似'cat source_file | ssh user @ host'cat>「/ dir with space& – chepner

0

使用scp或cp時,特殊字符可能會破壞文件路徑。你通過逃避特殊角色來解決這個問題。

使用cp,你可以使用正常的轉義特殊字符的方法,在特殊字符前面加上反斜槓。例如,對於空間中的路徑可以通過使用被複制:

cp photo.jpg My\ Pictures/photo.jpg

在SCP的遠程路徑不工作使用這種方法逸出。您需要使用雙反斜槓來轉義特殊字符。使用相同的例子,我的照片文件夾,將有它的空間使用轉義:

scp photo.jpg "[email protected]:/home/user/My\\ Photos/photo.jpg"

雙引號也很重要,有特殊字符的整個路徑必須用雙引號括起來。

來源:https://dominichosler.wordpress.com/2011/08/27/using-scp-with-special-characters/