我有一个“数据”目录,我通过shell脚本定期与远程NAS进行同步。
但是,我想提高效率。在运行rsync之前,我想检测“数据”中是否有更改。这样我就不会不必要地唤醒NAS上的驱动器。
我正在考虑修改shell脚本以获取Data中文件的最新修改时间(通过使用递归查找),并在每次数据被rsynced时将其写入文件。
在每次同步之前,shell脚本可以将“数据”的当前时间戳与“数据”同步时的上一个时间戳进行比较。如果当前时间戳较新,则为rsync,否则不执行任何操作。
我的问题是,有没有更有效的方法来确定自上次rsync以来是否修改了“Data”目录?请注意,Data有许多层子目录。
答案 0 :(得分:5)
如果我理解正确,您只想查看是否有任何文件已被修改,以便您可以确定是否继续执行脚本的rsync部分?
确定数据上次同步的时间非常简单,特别是如果你每晚都这样做。一旦找到mtime大于上次同步时间的文件,您就知道必须继续执行完整的rsync。
find
内置了此功能:
# find all files modified in the last 24 hours
find -mtime 1
答案 1 :(得分:3)
Rsync已经这样做了。没有按需解决方案,不需要检查inode的mtime和ctime属性。
但是,您可以创建一个守护程序,该守护程序使用inotify跟踪发生的更改,并定期触发rsync,或者只要您感觉有足够的事件发生以证明调用rsync是正确的。
答案 2 :(得分:3)
我会使用find命令,但是这样做:当rsync运行时,触摸一个文件,比如“rsyncranflag”。然后你可以运行
查找数据-newer rsyncranflag
这将明确说明自上次rsync以来是否有任何文件被更改(取决于mtime的准确性)。