使用 rsync 复制文件时,操作系统会通知临时文件而不是实际文件以监视服务。
例如,下面是一些文件通知,它们在扩展名“.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();
}
如果我们在没有 rsync 的情况下复制文件,比如 cp、scp,那么我们会得到正确的通知,但是在 rsync 的情况下,我们不会得到正确的文件修改,那么 rsync 有什么问题,
请随时分享对此的想法。
rsync 命令:
rsync -rtvz <source> <destination>