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 に送信します。これは、スペースが名前で分割されず、ワイルドカード以外の特殊文字 (~、$、;、& など) が変換されないことを意味します。ワイルドカードは、(シェルが行うのではなく) rsync によってリモート ホスト上で展開されます。

于 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 に答える