是的,我确实已经意识到在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
那么,任何想法?
答案 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指出如何两次处理参数。