检测目录中是否修改了某些内容,如果是,则备份 - 否则不执行任何操作

时间:2010-10-08 14:12:23

标签: linux bash scripting backup rsync

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

但是,我想提高效率。在运行rsync之前,我想检测“数据”中是否有更改。这样我就不会不必要地唤醒NAS上的驱动器。

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

在每次同步之前,shell脚本可以将“数据”的当前时间戳与“数据”同步时的上一个时间戳进行比较。如果当前时间戳较新,则为rsync,否则不执行任何操作。

我的问题是,有没有更有效的方法来确定自上次rsync以来是否修改了“Data”目录?请注意,Data有许多层子目录。

3 个答案:

答案 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的准确性)。