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
)を使用すると、シンボリックリンクはシンボリックリンクにコピーされますが、そうでなければ--force
rsync--delete
は空でないディレクトリをシンボリックリンクに置き換えることを拒否します。また、-a
ヒントを使用する-l
と、引き続き使用できます。