2

rsync を使用してファイルをコピーすると、OS はサービスを監視するために、実際のファイルではなく一時ファイルを通知します。

たとえば、以下は、拡張子「.ser」の後に何らかの文字が追加され、プレフィックス「.」が追加されたいくつかのファイル通知です。

.file1.ser.4QNNyx
.file2.ser.f08GVA
.file3.ser.UFBEi                           

以下の名前のファイルの予期される通知:

 file1.ser
 file2.ser
 file3.ser  

以下のコードのスナップショット、

  public void registerServiceWatch() {
    final ResourceWatchService watchService = new ResourceWatchService(directoryPath);
    IResourceObserver observer = new IResourceObserver() {
        @Override
        public void resourceModified(final String eventName, final Path filePath) {
            updateCache(eventName, filePath);
        }
    };

    Runnable runnable = new Runnable() {
        @Override
        public void run() {
            watchService.processEvents();
        }
    };
    watchService.addResourceObserver(observer);
    new Thread(runnable).start();
}              

cp、scp のように rsync なしでファイルをコピーすると、適切な通知が得られますが、rsync の場合、適切なファイル変更が得られません。rsync の問題は何ですか?

それについての考えを自由に共有してください。

rsync コマンド:

rsync -rtvz <source> <destination>

4

1 に答える 1

2

--inplacersync のオプションはターゲットに直接書き込み、中間の ..hash ファイルの作成を回避します

--temp-dir=DIRオプションは、別のディレクトリに一時オブジェクトを作成します

それらのいずれかを使用して、時計が一時的なイベントで通知されないようにすることができます

于 2014-03-25T15:00:14.313 に答える