当使用rsync将文件复制到目录中时,Java Watch服务从操作系统获得临时文件通知,而不是实际文件



当使用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>

rsync中的--inplace选项将直接写入目标,避免创建中间。散列文件

--temp-dir=DIR选项将在不同目录下创建临时对象

你可以使用它们中的任何一个来防止你的手表收到临时事件通知

相关内容

  • 没有找到相关文章

最新更新