2

したがって、ここにrsync示すように、バッチ スクリプトと Windows スケジューラを使用して、一般的に使用されるディレクトリをバックアップするために使用しています。

rsync.bat

@echo off

C:
chdir C:\Cygwin\bin

bash --login -i -c %1

Windows スケジューラを使用してこのバッチ スクリプトを定期的に実行していますが、ファイル パスにスペースを追加するまでは完全に機能します。バッチ ファイルのショートカットで使用するターゲット パスの例を次に示します。

目標:C:\Cygwin\scripts\rsync.bat "rsync -vruh /cygdrive/t/uploads /cygdrive/d/Backups"

それは完璧に機能します。空白のあるものは次のとおりです。

目標:C:\Cygwin\scripts\rsync.bat "rsync -vruh '/cygdrive/c/Users/username/My Documents' /cygdrive/d/Backups"

空白を含む最初のパスの一重引用符に注意してください。なぜこれがうまくいかないのか、私の人生では理解できません - -s スイッチを使用してバックスラッシュで空白をエスケープしようとしましたが、過去にいくつかの研究でこの問題が解決されましたが、悲しいかなどちらかで動作します。これを機能させる方法を知っている人はいますか?

4

4 に答える 4

12

スペースの問題は、コマンド ラインを解釈するために行われるargv処理にあります。他の UNIX アプリケーションと同様に、コマンド ラインで何らかの方法でスペースをエスケープする必要があります。そうしないと、引数を区切るためにスペースが使用されます。

例えば:

rsync -av host:'"a long filename"' /tmp/
rsync -av host:'a\ long\ filename' /tmp/
rsync -av host:a\\\ long\\\ filename /tmp/

または「?」を使用します。スペースを含むファイル名以外に一致するファイル名がない限り、スペースの代わりに (「?」は任意の文字に一致するため):

rsync -av host:a?long?filename /tmp/

コマンド ラインのリモート ファイル名がリモート シェルによって解釈されることがわかっている限り、すべて問題なく動作します。

http://rsync.samba.org/FAQ.html#9

于 2012-12-25T17:04:23.047 に答える
0

特殊なケース: パスにスペースとワイルドカード (*) がある場合、上記の解決策は機能しないようです ( rsync: link_stat...failed)

スペースのみを引用符で囲むとうまくいくようです。

/cygdrive/C/My" "Folder" "/My" "File*.txt
于 2016-02-25T23:04:41.610 に答える