检测目录中是否有修改内容,如果是,则备份 – 否则不做任何事情

我有一个“数据”目录,我通过shell脚本定期将rsync同步到远程NAS。

不过,我想让这个更有效率。 我想在运行rsync之前检测“数据”中是否发生了变化。 这样我就不会不必要地唤醒NAS上的驱动器。

我正在考虑修改shell脚本以获取Data中文件的最新修改时间(通过使用recursion查找),并在每次Data rsynced时将其写入文件。

在每次同步之前,当“数据”被同步时,shell脚本可以将“数据”的当前时间戳与先前的时间戳进行比较。 如果当前时间戳较新,那么rsync,否则什么都不做。

我的问题是,是否有一个更有效的方法来确定“数据”目录是否自上次rsync以来修改? 请注意,数据有很多很多的子目录层。

如果我理解正确,你只是想看看是否有任何文件已被修改,所以你可以找出是否继续脚本的rsync部分?

找出数据上次同步的时间非常简单,特别是如果你每晚都这样做的话。 只要你找到一个mtime大于上次同步时间的文件,就知道你必须继续完整的rsync。

find有内置的这个功能:

 # find all files modified in the last 24 hours find -mtime 1 

Rsync已经这样做了。 没有按需解决方案,不需要检查inode的mtime和ctime属性。

但是,您可以创建一个使用inotify跟踪更改的守护进程,并且每隔一段时间触发一次rsync,或者每当您感觉到足够的事件发生时,都可以调用rsync。

我会使用find命令,但是这样做:当rsync运行时,触摸文件,如“rsyncranflag”。 那你可以跑了

找到Data -newer rsyncranflag

这将明确地说明自上次rsync以来是否有文件被更改(受mtime的准确性影响)。