我正在同步一个有一堆文件的目录。 在文件名中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"
请注意,即使远程server
和user
也在报价下。
格列布把我放在正确的轨道上。 我试图在引号内(和引用和转义目的地的其他变体)一起尝试转义,并且不起作用。
我现在回去了,发现它将通过双重逃离目的地的工作:
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"
“这是一个信号到壳,它可能不作为一个参数的一部分。