带空格的SSH路径上的Rsync不适用于引号


17

只要路径中没有空格,我就能通过SSH成功​​地进行RSYNC。

当路径中有空格时,它将不起作用。我已经尝试了斜杠,双引号和双引号。

当我使用斜杠时,输出表明这是成功的,但是我看不到任何传输的文件。

rsync -avz /path\ with\ spaces/ user@remotelocation:/media/another\ path\ with/spaces/

当我使用单引号或双引号时,它告诉我输入密码后权限被拒绝

rsync -avz '/path with spaces/' 'user@remotelocation:/media/another path with/spaces/'

我能做什么?

谢谢。

Answers:


12

使用示例代码和引用扩展rzr的答案,只需添加-s标志,引用路径,而不必担心在远程路径中转义空格:

rsync -avzs '/path with spaces/' 'user@remotelocation:/media/another path with/spaces/'

作为参考,OP指定的选项:

  • -a,归档模式,等于-rlptgoD(无-H,-A,-X)
    • 包括:
    • -r,--recursive,递归到目录
    • -l,-links,将符号链接复制为符号链接
    • -p,-perms,保留权限
    • -t,--times,保留修改时间
    • -g,--group,保留组
    • -o,--owner,保留所有者(仅限超级用户)
    • -devices,保留设备文件(仅超级用户)
    • -特殊,保留特殊文件
  • -v,--verbose,增加详细程度
  • -z,--compress,在传输过程中压缩文件数据

所需的附加参数:

  • -s,-protect-args,无空格分隔,仅通配符

13

您需要在本地外壳程序和远程外壳程序中转义空格。尝试这个:

rsync -avz '/path with spaces/' 'user@remotelocation:/media/another\ path\ with/spaces/'

/path with spaces/只能通过在本地外壳中加上单引号()来转义源'/path with spaces/'

另一方面,在目的地的情况下,本地外壳通过使用单引号引起来,而空格在远程外壳中通过使用\空格前面的转义字符()进行转义。


3
只是要强调-您需要引号和反斜杠。
Sridhar Sarnobat '16

2

看看rsync选项–protect-args(-s),不需要额外的斜杠


1
如果您提供一个新手用户可以遵循的示例,您的答案将会大大改善。谢谢!
2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.