2

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

4

1 回答 1

2

--inplacersync 中的选项将直接写入目标,避免创建中间 ..hash 文件

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

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

于 2014-03-25T15:00:14.313 回答