源目录是这样确定的:
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 /”不是目录“,”/ mnt / bigfish / video / TV / Name“不是一个目录等,因为很多空格分隔的单词是在源目录的名称。
我怎样才能纠正这个令人讨厌的问题呢?
更新我在OS 10.6上运行这个,我结束了stringreplace空格,如下所示:
SRC=wells@kittenfactory.com:"/mnt/bigfish/video/TV/${SHOW// /\ }/"
从rsync手册 :
-s,–protect-args
此选项将所有文件名和大多数选项发送到远程rsync,而不允许远程shell解释它们。 这意味着空格不会被分割,并且任何非通配符特殊字符都不会被翻译(例如〜,$,;,&等)。 通配符在远程主机上通过rsync(而不是shell)进行扩展。
由于你的问题是专用于OS X,根据苹果的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
这工作:
rsync -avz -e ssh "wells@server.com:\"/mnt/bigfish/video/TV/${SHOW}/\""
所以设置:
SRC=wells@server.com:\"/mnt/bigfish/video/TV/${SHOW}/\"
至少,在Debian上它的功能就像一个魅力,没有OS 10可以在这里测试。
如果您正在处理脚本中的参数,则可以在OSX上执行此操作:
ESCAPED_SRC="$(echo "$SRC" | tr ' ' '\\ ')" ESCAPED_DEST="$(echo "$DEST" | tr ' ' '\\ ')" rsync -ravP "$ESCAPED_SRC" "$ESCAPED_DEST"