パスのシンボリックリンクを使用したrsync [閉じる]

パスのシンボリックリンクを使用したrsync [閉じる]

ディレクトリに次のパスがあるとします。

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

おすすめ記事