これは以下に関連しています。この問題しかし、私の考えにはその答えがここには適用されないようだ。
ディレクトリを互いに同期する2つのサーバーがあります。これらのディレクトリにはファイルとシンボリックリンクが含まれています。サーバー上第二、サーバーから同期しますㅏ次のコマンドを使用します。rsync -auv A:dir/ dir/
私が望むもの: すべてのファイルまたはシンボリックリンクㅏそのファイルやシンボリックリンクとは異なり、最新バージョンです。第二同期しました。
実際に何が起こったのか: すべてのファイルㅏこのファイルは次のファイルとは異なり、最新バージョンです。第二同期しました。任意のシンボリックリンクㅏこれは対応するシンボリックリンクとは異なります。第二すでに同期しています。タイムスタンプとは無関係。
マニュアルページにはrsync
次のものがあります(強調表示されています)。
-u、--更新
これにより、rsyncがターゲットに存在し、ソースファイルよりも変更時間が最新のすべてのファイルをスキップします。 (既存のファイルの変更時間が元のファイルと同じ場合、サイズが異なるとファイルが更新されます。)これはシンボリックリンクやその他の特殊ファイルのコピーには影響しません。
したがって、これは予想される動作です。なぜこれですか?回避策がありますか?または、サーバーがしばらくオフラインになってデータが失われた後にこれらのディレクトリを同期したままにするという全体的な目標を達成するための代替ソリューションはありますか?
私のrsyncバージョンは3.0.9
。
はい:私は2つのディレクトリを設定し、Adir
各Bdir
ディレクトリには異なる内容のファイルとシンボリックリンクが含まれています。
$ ls -l Adir/ Bdir/
Adir/:
total 0
-rw-r--r-- 1 kevin kevin 5 May 27 18:00 file
lrwxrwxrwx 1 kevin kevin 10 May 27 18:00 symlink -> /some/file
Bdir/:
total 0
-rw-r--r-- 1 kevin kevin 6 May 27 17:00 file
lrwxrwxrwx 1 kevin kevin 16 May 27 17:00 symlink -> /some/other/file
実行rsync --dry-run -auv Adir/ Bdir/
出力は次のとおりです。
sending incremental file list
./
file
symlink -> /some/file
sent 101 bytes received 21 bytes 244.00 bytes/sec
total size is 15 speedup is 0.12 (DRY RUN)
これがまさに私が期待したものです。ファイルとシンボリックリンクを最新の状態にコピーします(練習を実行していない場合)。ただし、実行rsync --dry-run -auv Bdir/ Adir/
結果は次のとおりです。
sending incremental file list
./
symlink -> /some/other/file
sent 104 bytes received 18 bytes 244.00 bytes/sec
total size is 22 speedup is 0.18 (DRY RUN)
Bdir/symlink
それより古い場合でも、Adir/symlink
まだ同期されます。
答え1
1つの回避策は、rsyncのシンボリックリンクを無視して別々に実行することです。たとえば、tar
最新のターゲットを上書きしないように要求します。例えば
( cd Adir; find . -type l |
tar cf - -T-
) |
tar xvvf - --keep-newer-files -C Bdir