rsyncのマンページと、ここserverfaultに関するいくつかの関連する質問を詳しく調べました。 -Rと-Lと-lのオプションで遊んだことがありますが、運がありません。
ここに質問があります:ローカルからリモートにディレクトリを送信するとき、リモートマシンの宛先ディレクトリを基準にするようにローカルディレクトリを基準にしてシンボリックリンクを再配置するオプション(またはオプションコンボ)はありますか?
これが私が送りたいものの最小限の例です:
ローカルディレクトリ: /home/bob/foo
/home/bob/foo/a --> /home/bob/foo/bar
/home/bob/foo/bar
これが私がどのように実現したいのか
リモートディレクトリ: /u/apps/foo
/u/apps/foo/a --> /u/apps/foo/bar
/u/apps/foo/bar
たとえば、rsync -az /home/bob/foo/ remote:/u/apps/foo/
完全には行いません。最終的に:
/u/apps/foo/a --> /home/bob/foo/bar
/u/apps/foo/bar
/home/bob/foo/bar
かどうか リモートマシンに存在するかどうかは関係ありません。どちらの場合でも、結果は間違いなく私が必要とするものではありません。
承認された回答:
リンクが絶対パスへのリンクである場合、それを回避する方法はありません。シンボリックリンクを相対的なものにすることで回避できます:
/home/bob/foo/a --> ./bar /home/bob/foo/bar
ただし、これらのリンクを生成する方法とリンクの数によっては、それが難しい場合があります。