rsync
スクリプトに埋め込まれたbash
コマンドの一部としてディレクトリツリーを次のように除外しようとしています。
$OPTIONS="-rl --exclude 'Some Parent Directory/Another Directory'"
rsync $OPTIONS $SOURCEDIR [email protected]:/SomeTargetDir
私の目的は、$SOURCEDIR
の下にあるすべてのものを除いて、ターゲットマシン上のすべての/SomeTargetDir
をSome Parent Directory/Another Directory
に同期することです。ただし、次の形式のエラーが表示され続けます。
rsync: link_stat "/Users/myusername/Parent\" failed: No such file or directory (2)
これは除外パスのエスケープに関連していると思いますが、正しく理解できないようです。\\
、\
などのすべての組み合わせが正しくないようです。除外ルールを正しく作成するにはどうすればよいですか?
どうしても必要な場合を除いて、--exclude-from
は使いたくありません。
OS X 10.8でrsyncバージョン3.0.9を使用しており、SSH経由でUbuntu12.04に同期しています。
使用する --exclude-from
。除外ファイルにはすべてのパターンが改行され、引用符、エスケープ、スペースの問題を忘れることができます。
私はあなたと同じようなスクリプトを持っています、そしてこれは私がしたことです。このソリューションでは、スクリプトで除外ファイルを生成しているため、引用符が正しいことを確認する必要があることに注意してください。静的除外ファイルを作成できる場合は、さらに簡単になります。
# create a temporary file
RSYNC_EXCLUDES=$( mktemp -t rsync-excludes )
# remove the temp file when the script exits
trap "rm -f $RSYNC_EXCLUDES" EXIT
# populate the exclusion file
echo 'Some Parent Directory/Another Directory' > "$RSYNC_EXCLUDES"
# have your options point to your exclusion file
$OPTIONS="-rl --exclude-from='$RSYNC_EXCLUDES'"
# profit
rsync $OPTIONS $SOURCEDIR [email protected]:/SomeTargetDir
一致パターンも除外します。したがって、次のように試してください。
$OPTIONS="-rl --exclude '*/Another Directory'"
rsync $OPTIONS $SOURCEDIR [email protected]:/SomeTargetDir
詳細については、これを参照してください チュートリアル 。
もう1つの提案は、一重引用符を使用するのではなく、二重引用符をエスケープすることです。
$OPTIONS="-rl --exclude \"Some Parent\ Directory/Another\ Directory\""
OPはこの代替案を試しましたが、彼の場合はまだ機能しませんでした。 rsync
のバージョン「3.0.8プロトコルバージョン30」を使用するLinuxでは動作します。