0

我创建了基于 inotify-tools 的简单脚本,但最后当我决定监控 /remotepath 时,它是通过命令 mount.cifs 从 NAS 挂载的,它不起作用。

因此,经过一番调查,我发现了 inotify-tools 不支持远程文件夹的信息。

你们中是否有人对简单的工具有任何经验,这将使我有机会观看远程文件夹,如果有什么变化,那么将运行 rsync。

也许我应该只使用 rsync 并将远程文件夹与新文件同步?

感谢您的任何想法。

同时,我创建了一些简单的 bash 脚本来执行我想要的操作,但是我遇到了一个问题,如果从目标文件夹中删除某些内容并且我不想再次同步这个已删除的文件会发生什么。知道如何解决这个问题吗?

#!/bin/bash

### Logs path
path="/var/log/compare"
log="compare.log"
listing1="listing1.log"
listing2="listing2.log"
### Path which will be monitored
destination="/path/to/destination/"
source="/path/to/remote/folder"


## Watching for content in source folder
ls -lh $source > $path/$listing1
### I`m checking if something was changed
        echo "$(date)" 'INFO' 'I will compare listing files' >> "$path/$log"
        if cmp -s "$path/$listing1" "$path/$listing2"
### Files are the same
        then
        echo "$(date)" 'INFO' 'Listings are the same' >> "$path/$log"
### Files are different
        else
        rsync -art $source $destination
        echo "$(date)" 'INFO' 'Finished synchronization' >> "$path/$log"
fi
cp $path/$listing1 $path/$listing2
4

1 回答 1

0

inotify 确实是该工作的错误工具;它通过拦截内核中的文件系统活动来工作,因此将完全错过远程活动。

一个理想的解决方案是在 NAS 机器上运行 inotify。这对于某些设备当然是可能的,但你没有说你有什么设备(如果你说了,我可能没有相同的设备)。

存在的任何其他工具都会完全按照您的脚本所做的事情(尽管可能更漂亮),所以我认为您不需要追求那个途径。

无论如何,您的脚本完全是多余的!如果您只是定期运行 rsync,它会做完全相同的事情(rsync -t只是比较文件名、大小和时间戳)。唯一的区别是 rsync 会将远程文件列表与您的真实文件进行比较,而不是文件列表的缓存副本。顺便说一句,-a意味着-r-t,所以rsync -a就足够了。

我会研究一件事:直接在 NAS 设备上运行 rsync。通过 CIFS 访问文件列表的效率低于在本地运行它,因此如果您的 NAS 可以支持 rsync,那么就这样做。(群晖NAS盒子有rsync,其他设备我就不知道了。)

于 2016-04-11T12:32:59.147 回答