让rsync用单引号处理单个文件

我正在同步一个有一堆文件的目录。 在文件名中input文件中所有奇怪字符的用户。 我需要将这些文件从Linux上的一个位置同步到另一个位置。 很多时候,只有一个文件需要更新。 当文件名包含一个单引号时,它会发出咕噜声。 我需要指定用户@服务器的目的地,否则它的作品。 例如:

rsync --rsh=ssh "zz/joe's change.txt" "/somedir/y/joe's change.txt" 

作品。

 rsync --rsh=ssh "zz/joe's change.txt" user@server:"/somedir/y/" 

也有效。

但是我希望使用的forms是:

 rsync --rsh=ssh "zz/joe's change.txt" user@server:"/somedir/y/joe's change.txt" 

失败:

 bash: -c: line 0: unexpected EOF while looking for matching `'' bash: -c: line 1: syntax error: unexpected end of file rsync: connection unexpectedly closed (0 bytes read so far) rsync error: error in rsync protocol data stream (code 12) at io.c(165) 

我可以使用第二种forms(除非一些坚果在目录名称中),但真的想要使用第三种forms。

你可能需要逃避那个angular色。 从bash手册页

一个不带引号的反斜杠(\)是转义字符。 它保留下一个字符的字面值,除了<newline>之外。

在这种情况下,最后对我的作用是使用--protect-args-s参数,然后将整个事件放在引号内,如下所示:

 rsync -s --rsh=ssh "zz/joe's change.txt" "user@server:/somedir/y/joe's change.txt" 

请注意,即使远程serveruser也在报价下。

格列布把我放在正确的轨道上。 我试图在引号内(和引用和转义目的地的其他变体)一起尝试转义,并且不起作用。

我现在回去了,发现它将通过双重逃离目的地的工作:

 rsync --rsh=ssh "zz/joe's change.txt" user@server:/somedir/y/joe\\\'s\\\ change.txt 

要么

 rsync --rsh=ssh zz/joe\'s\ change.txt user@server:/somedir/y/joe\\\'s\\\ change.txt 

尝试:

 rsync --rsh=ssh "zz/joe's change.txt" "user@server:/somedir/y/joe's change.txt" 

“这是一个信号到壳,它可能不作为一个参数的一部分。