如何逃避&在scp

时间:2015-11-10 13:34:52

标签: shell escaping scp

是的,我确实已经意识到在scp中已经被问过一千次如何逃避空间,但我没有用& -sign做到这一点,所以,如果该标志是目录名称的一部分。

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

&标志似乎把事情搞得一团糟,使用\&将无法解决问题,因为找不到远程目录:

[sorunome@sorunome-desktop tmp]$ scp test.txt "bpi:/home/sorunome/test \& stuff"
scp: ambiguous target

甚至不通过省略引号并在整个地方添加\,这是有效的:

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

那么,任何想法?

4 个答案:

答案 0 :(得分:7)

逃离空间和&符号为我做了诀窍:

scp source_file "user@host:/dir\ with\ spaces\ \&\ ampersand"

由于某些原因,仍然需要报价。

答案 1 :(得分:0)

使用scp或cp时,特殊字符可能会破坏文件路径。你通过逃避特殊角色来解决这个问题。

使用cp,您可以使用转义特殊字符的常规方法,该方法在其前面加上反斜杠。例如,可以使用以下方法复制带空格的路径:

cp photo.jpg My\ Pictures/photo.jpg

使用此方法,scp中的远程路径无法转义。您需要使用双反斜杠转义特殊字符。使用相同的示例,My Photos文件夹将使用以下方式转义其空间:

scp photo.jpg "user@remotehost:/home/user/My\\ Photos/photo.jpg"

双引号也很重要,带有特殊字符的整个路径必须用双引号括起来。

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

答案 2 :(得分:0)

如果您需要逃脱%,请使用%%

答案 3 :(得分:0)

用另外一对\"包围文件名,如下所示:

scp "test.txt" "bpi:/home/sorunome/\"test & stuff\""

由于文件名内部无需更改,因此可以直接将其应用于变量:

scp "$local" "bpi:/home/sorunome/\"$remote\""

外部引号(")由本地外壳程序解释。内引号(\")在远程服务器上解释。感谢@chepner指出如何两次处理参数。