rsync
está passando a string entre aspas para a máquina remota. Se você escapa de um espaço entre aspas, então essa barra invertida se torna parte da string (não é comido pelo seu shell).
A % página de manual dorsync
se refere ao escape:
If you need to transfer a filename that contains whitespace, you can either specify the
--protect-args
(-s
) option, or you'll need to escape the whitespace in a way that the remote shell will understand. For instance:
CWrsync -av host:'file\ name\ with\ spaces' /dest
Você pode ver como os caracteres especiais são (ou não) comidos pelo shell usando um script simples como este:
#!/bin/sh
n=1
echo "$@"
for i in "$@"
do
echo "$n:$i"
n='expr $n + 1'
done
chamando isso args
:
$ args "xx\ yy"; args "xx yy"
xx\ yy
1:xx\ yy
xx yy
1:xx yy
Como rsync
não adiciona aspas (a menos que solicitado, usando -s
), os espaços devem ser manuseados especialmente quando enviados como parte de um comando shell para a outra máquina.