ディレクトリに次のパスがあるとします。
a/b/c/d/e
実際にc
シンボリックリンク、
a/b/c -> f
f
が含まれていますd/e
。
その後、フラグなしrsync -avzR
で実行すると、まだ「安全でない」リンクがコピーされます。--copy-unsafe-links
期待される:
a/b/c->f
f/d/e
私が走るときrsync -avzR a/b/c/d/e some_dir
。
実際の出力:
a/b/c/d/e
このようにして予想される出力をどのように取得できますか?
ベストアンサー1
すべてman rsync
(私のハイライト):
-R、--相対的
相対パスを使用します。これは、ファイル名の最後の部分だけでなく、コマンドラインで指定されたフルパス名がサーバーに送信されることを意味します。 [もし]あなたが使用した場合
rsync -avR /foo/bar/baz.c remote:/tmp/
その後、/tmp/foo/bar/baz.c という名前のファイルがフルパスを維持しながらリモートシステムに作成されます。これらの追加パス要素を呼び出します。「隠しディレクトリ」(つまり、上記の例の「foo」および「foo / bar」ディレクトリ)
rsync 3.0.0以降、rsyncは、パス要素が実際に送信側のシンボリックリンクである場合でも、常にこれらの暗黙的なディレクトリをファイルリストの実際のディレクトリに送信します。 これにより、パスにシンボリックリンクがあることを認識していないファイルのフルパスをコピーするときに実際に予期しない動作を防ぐことができます。サーバー側シンボリックリンクをコピーするには、そのパスにシンボリックリンクを含め、実際のパスで参照されているディレクトリを含めます。転送側で古いrsyncを処理する場合は、このオプションを使用できます
--no-implied-dirs
。
したがって、あなたが経験する動作が期待されます。
この問題を克服する方法は?まだテストしていませんが、考えられる解決策は次のとおりです。
mkdir -p some_dir/a/b
rsync -avz a/b/ some_dir/a/b # Trailing slash after first 'b'
rsync -avz a/b/c/f some_dir # No trailing slash after 'f'
私も読むことをお勧めしますシンボリックリンクマニュアルページの一部rsync
。