为什么我有时必须在rsync路径中加倍转义空格?


1

当引用带空格的路径时,例如 Steve Jobs,当路径是本地目录时,我可以反斜杠转义,或用引号括起来:

rsync Steve\ Jobs user@remote:/

要么

rsync "Steve Jobs" user@remote:/

但是,什么时候 Steve Jobs 是远程目录,周围有引号是不够的。一世 必须反斜杠逃避空间:

rsync user@remote:/"Steve\ Jobs" .

任何人都知道为什么会发生奇怪的事

如果这是SSH的工件,为什么SSH会出现这种奇怪的现象?

Answers:


2

rsync 将引号内的字符串传递给远程计算机。如果您使用引号转义空格,则该反斜杠将成为字符串的一部分(它不会被您的shell使用)。

rsync 手册页 是指逃避:

如果需要传输包含空格的文件名,可以指定 --protect-args-s )选项,或者您需要以远程shell将理解的方式转义空白。例如:

CWrsync -av host:'file\ name\ with\ spaces' /dest

您可以使用如下的简单脚本查看shell如何(或不)使用特殊字符:

#!/bin/sh
n=1
echo "$@"
for i in "$@"
do
    echo "$n:$i"
    n=`expr $n + 1`
done

这称呼 args

$ args "xx\ yy"; args "xx yy"
xx\ yy
1:xx\ yy
xx yy
1:xx yy

以来 rsync 不添加引号(除非要求,使用 -s ),当作为shell命令的一部分发送到另一台机器时,必须特别处理这些空间。

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.