5

源目录是这样确定的:

SHOW=${PWD##*/}
SRC=wells@server.com:"/mnt/bigfish/video/TV/${SHOW}/"

所以结果是这样的:

wells@server.com:/mnt/bigfish/video/TV/The Name Of the Show With Spaces/

然后尝试像这样运行 rsync:

rsync -avz -e ssh "${SRC}" .

但它告诉我 ""/mnt/bigfish/video/TV/The" 不是一个目录,""/mnt/bigfish/video/TV/Name" 不是一个目录,等等,不管有多少空格分隔的单词位于源目录的名称中。

我怎样才能纠正这个非常烦人的问题?

更新我在 OS 10.6 上运行它,我最终用转义空格替换字符串,如下所示:

SRC=wells@kittenfactory.com:"/mnt/bigfish/video/TV/${SHOW// /\ }/"
4

4 回答 4

6

rsync 手册

-s, --protect-args
此选项将所有文件名和大多数选项发送到远程 rsync,而不允许远程 shell 解释它们。这意味着名称中不会拆分空格,并且不会翻译任何非通配符的特殊字符(例如~、$、;、& 等)。通配符在远程主机上通过 rsync 进行扩展(而不是由 shell 来做)。

于 2010-07-26T00:48:03.907 回答
2

由于您的问题专门针对 OS X,因此根据Apple rsync 手册,您可以使用简单的引号或通配符来完成此操作?

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

只需要这样做并且使用简单的引号就可以完美地工作:

rsync -r --partial --progress --exclude=".cvs" --exclude=".svn" --exclude=".git" --rsh=ssh root@datakeep.local:'/volume1/devel/__To\ SORT/___XXXXX\ Saves\ 2011-04' ./Saves2011
于 2012-10-17T22:02:58.623 回答
1

这有效:

rsync -avz -e ssh "wells@server.com:\"/mnt/bigfish/video/TV/${SHOW}/\""

所以设置:

SRC=wells@server.com:\"/mnt/bigfish/video/TV/${SHOW}/\"

至少,在 Debian 上,它就像一个魅力,这里没有可供测试的 OS 10。

于 2010-07-26T00:57:48.503 回答
0

如果您正在处理脚本中的参数,您可以在 OSX 上执行此操作:

ESCAPED_SRC="$(echo "$SRC" | tr ' ' '\\ ')"
ESCAPED_DEST="$(echo "$DEST" | tr ' ' '\\ ')"
rsync -ravP "$ESCAPED_SRC" "$ESCAPED_DEST"
于 2014-02-27T02:58:51.333 回答