使用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();
}
如果我们复制的文件没有像cp,scp这样的rsync,那么我们会得到正确的通知,但是在rsync的情况下,我们将无法进行正确的文件修改。
请分享您的想法。
rsync命令:
rsync -rtvz <source> <destination>
--inplace
rsync中的option将直接写入目标,避免创建中间..hash文件
--temp-dir=DIR
选项将在其他目录中创建临时对象
您可以使用它们中的任何一个来防止手表因临时事件而被通知
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句