2016-09-21 3 views
0

をファイルを指す場合、私は次の構造を持っているスキップ:ソースフォルダの「根」の対象で
のRsync - ディレクトリとしてコピーシンボリックリンクが、彼らは

/source/link1/->/dir1 
/source/link2/->/dir2 
/source/link1/file2 
/source/link1/link11->/dir2/file21 

link=symbolic link, file=real file. 

を(リモート)ディレクトリリンクをコピーする必要があります/source/link1/source/link2フォルダの下にあるリンクはコピーしないでください。また、重複した構造を避けるために、リンクとしてのみコピーしてください。ターゲットの構造は次のとおりです。

/target/link1 - directory 
/target/link2 - directory 
/target/link1/link11->/target/link2/file21 
/target/link1/file2 

rsyncでそれを維持する方法は? 毎日の同期には毎日のターゲットとソースフォルダを同期させる必要があり、rsyncは--deleteコマンドで使用する必要があります。そう他のリンクは、トップレベルのリンクは、「安全でない」であることを起こるとした場合

-l, --links     copy symlinks as symlinks 
    -L, --copy-links   transform symlink into referent file/dir 
     --copy-unsafe-links  only "unsafe" symlinks are transformed 
     --safe-links   ignore symlinks that point outside the tree 
     --munge-links   munge symlinks to make them safer 
    -k, --copy-dirlinks   transform symlink to dir into referent dir 
    -K, --keep-dirlinks   treat symlinked dir on receiver as dir 

答えて

2

rsyncは(manページから)リンクに対処するためのオプションの範囲を持っていますすべて "安全"であれば、--copy-unsafe-linksはあなたのためにちょうど働くでしょう。

そうでなければ、私はあなたが一度にトップレベルのディレクトリ1を同期するためにループを使用することをお勧めします:

rsync -a --delete /source/link1/ /target/link1/ 

注意を-a--linksを意味し、そのディレクトリ内のすべてのリンクはをコピーされることasリンク、逐語的。 link1の最上位レベルはと扱われます。の場合、末尾に/を使用して逆参照します(つまり、rsyncがスキャンしているツリーの外側です)。

関連する問題