3

Java 7 の new.xml を使用して、ルート フォルダーとそのサブフォルダーを監視する小さな Java アプリケーション/サービスがありますjava.nio.file.WatchService。新しいイベント (新しいファイル、変更、削除など) が発生すると、サーバー A からサーバー B (またはその逆) にファイルをコピーするために rsync 実行を開始します。このコマンドは --delete オプションを使用して、A から削除されたファイルが B からも削除されるようにします。ただし、この機能を使用するには、有効にする必要があります-r(再帰サブディレクトリ)。通常、これは大したことではありませんが、ルート フォルダーには 5 GB のデータ (19000 ファイル、1500 フォルダー) があります。Rsync は優れた機能を備えていますが、それでも実行に数分かかります。

私が抱えている問題は、ファイルが両方のサーバーでほぼ同時に変更された場合、サーバー A で作成された新しいファイルが B-> A の同期プロセスによって削除される可能性があることです--delete。宛先にはソースよりも多くのファイルがあります。

私はすでに Java アプリケーションですべてのディレクトリを再帰的に監視しているので-r、rsync で (再帰的に) 使用する必要はありません。私の最初の考えは、rsync で再帰の深さを制限することでしたが、それは rsync の機能ではないと思います。使用も検討し--excludeましたが、パターンがどのように見えるかわかりません。誰にもアイデアはありますか?

参考までに、生成された rsync コマンドのサンプルを次に示します。

rsync -r --no-group --no-owner --no-perms --update --checksum --verbose --progress --stats --delete --ignore-errors "/media/server1files/" "/server2::server2"

4

1 に答える 1

7

-r使用する適切なパターンを使用している場合でも、サブフォルダーを除外するには--exclude "/**/*".

于 2012-09-05T13:23:38.017 に答える