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>