带有空格的 SSH 路径上的 Rsync 无法与引号一起使用

带有空格的 SSH 路径上的 Rsync 无法与引号一起使用

只要路径中没有空格,我就能够通过 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/'

我能做些什么?

谢谢。

答案1

使用示例代码和参考资料扩展 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,保留设备文件(仅限超级用户)
    • -specials,保留特殊文件
  • -v, --verbose,增加详细程度
  • -z, --compress,在传输过程中压缩文件数据

需要的附加参数:

  • -s, --protect-args,无空格分割,仅使用通配符

答案2

您需要在本地 shell 和远程 shell 中转义空格。尝试以下操作:

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

在本地 shell 中,源/path with spaces/只能通过在其两边加上单引号来进行转义,即'/path with spaces/'

另一方面,对于目标,本地 shell 通过使用单引号进行转义,而远程 shell 中则通过\在空格前使用转义字符 ( ) 进行转义。

答案3

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

相关内容