rsync:ディレクトリをシンボリックリンクと比較する

rsync:ディレクトリをシンボリックリンクと比較する

これにはさまざまな類似の質問がありますが、それらのどれもこの質問に完全に答えることができないようです。

リモートサーバーに正確にミラーリングする必要があるローカルディレクトリ()がありwww、このディレクトリが正しいコピーであることを確認する必要があります。

www内部の他のファイルへのシンボリックリンクを含みますwww(通常のファイルとディレクトリへのリンク)。このコマンドは、ボーナスとしてローカルのsvnディレクトリを除いて2つのバージョンを比較し、www他のファイルのみを印刷します。

[local]$ rsync -rvnc --exclude=.svn/ --delete www/ remote:/var/www/

しかし、シンボリックリンクに従わず、通常のファイルではないと報告するだけです。したがって、シンボリックリンクを逆参照してそのターゲットを比較する必要があります。これも機能しません。rsync -rvncL変わらない(とにかく見ることができる)多くのファイルを印刷し、何もしません。どんなアイデアがありますか?rsync -rvncK-L-K

ベストアンサー1

シンボリックリンクで一般的なコマンドを使用するのは難しいです。findコマンドは問題をうまく処理します。したがって、コアはを使用することですfind。必要に応じて高速CRCまたは暗号化ハッシュ機能をお勧めします。

したがって、これはうまくいくはずです(必要に応じて補足することができます)。

find -L www -type f -exec cksum {} \; | cut -d ' ' -f1-2 | md5sum

チェックサムの暗号化サポートが必要な場合

find -L www -type f -exec sha256sum {} \; | cut -d ' ' -f1 | sha256sum

sha256はファイルエラーとディレクトリエラーに対してのみ機能し、カットはチェックサム/ハッシュを最終関数に渡し、実際にパス名が異なる場合は偽の肯定を防ぐためにのみ使用されるため、「タイプ」識別子が必要です。

注:シンボリックリンクが相対的でなく、両方のシステムのパスがまったく同じでない場合(シンボリックリンクが実行されているディレクトリの外部を指している場合に発生する可能性があります)、この操作は失敗しますfind

おすすめ記事