rsyncはシンボリックリンクについて文句を言います。

rsyncはシンボリックリンクについて文句を言います。

dry-run(-n)オプションを使用して、2rsyncつの異なるシステムのディレクトリを比較します。標準ファイルとディレクトリでは、すべてがうまく機能します。ただし、シンボリックリンクを含むディレクトリを使用すると、次のエラーが発生します。

> ls -l /usr/user1/server10s/system/
total 1
lrwxrwxrwx   1 localuser  other         37 Jun 19 17:18 nrcalc -> /usr/user2/nrcalc10s
> rsync -n -avrc /usr/user1/server10s/* aisdba@Server:deployment_area/server
building file list ... done
system/
cannot delete non-empty directory: system/nrcalc
could not make way for new symlink: system/nrcalc
template/
template/nrcalc
sent 190 bytes  received 24 bytes  38.91 bytes/sec
total size is 330  speedup is 1.54
rsync error: some files could not be transferred (code 23) at main.c(692)

実際には何も変更しようとしなかったので、ディレクトリを削除できないのは嬉しいですが、なぜそうしようとしますか?ところで、-l(リンク)と(リンクコピー)オプションを追加してみましたが、-K役に立ちませんでした。

ディレクトリ構造にシンボリックリンクがある場合でも、この比較はどのようにできますか?

ベストアンサー1

示されているように、system/nrcalcローカルシステムのシンボリックリンクですが、リモートサーバーのディレクトリです。リモートシステムのディレクトリが空でない場合、rsyncはまたはオプションの--forceいずれかを指定しない限り、そのディレクトリの削除を拒否します(シンボルリンクを作成するため)--delete。リモートディレクトリを交換したくないが、まだローカルシンボリックリンクが指すエントリで更新する必要がある場合に使用できます--copy-dirlinks

Rsync は、指定された場合でもそれについて不平を言い、--dry-runユーザーが要求した操作を実行するには、リモートディレクトリを削除する必要があることを思い出させます。私が言及したオプションの1つを組み合わせると、-n実際には何も削除せずにきちんとテストを実行できます。

試した他のオプションは次のとおりです。

  • オプション-K()はターゲット側を除いて--keep-dirlinks同じです。--copy-dirlinksあなたのシンボリックリンクはソース側にあるので、このオプションはあなたには影響しません。

  • オプション-l--links)を使用すると、シンボリックリンクはシンボリックリンクにコピーされますが、そうでなければ--forcersync--deleteは空でないディレクトリをシンボリックリンクに置き換えることを拒否します。また、-aヒントを使用する-lと、引き続き使用できます。

おすすめ記事