Bash - 检查文件更改的速度比md5更快?

时间:2017-11-02 11:42:40

标签: mysql bash md5

我已经在我的系统上设置了一个用于本地测试的MySQL数据库,并且我正在监控这些表以查看何时进行了更改。

第1步 - 转到DIR

cd /usr/local/mysql-5.7.16-osx10.11-x86_64/data/blog_atom_tables/

第2步 - 运行脚本

watchDB

watchDB()的位置(为了便于阅读而稍作修改)......

function watchDB() {
    declare -A aa    // Associative array of filenames and their md5 hashes
    declare k        // Holder for current md5

    prt="0"

    while true; do    // Run forever

        // Loop through all table files within directory
        for i in *.ibd;
        do
            k=$(sudo md5 -q $i)    // md5 of file (table)

            // If table has not been hashed yet
            if [[ ${aa[$(echo $i | cut -f 1 -d '.')]} == "" ]]; then

                aa[$(echo $i | cut -f 1 -d '.')]=$k

            // If table has been hashed, and diff md5 (i.e. table changed)
            elif [[ ${aa[$(echo $i | cut -f 1 -d '.')]} != $k ]]; then

                echo $i;
                aa[$(echo $i | cut -f 1 -d '.')]=$k

            fi
        done
    done
}

TL; DR 遍历目录中的所有表文件,保存每个md5的副本,并继续循环检查更改。

我不需要查看哪些行/列已更改,只是表本身不同。在大多数情况下,这完全符合我的要求,但计算每个表的md5需要相当长的时间。对于仅25个表,执行每个循环需要3到5秒。

除了md5之外,还有更快捷的方法吗?我使用类似cmp之类的东西,但我需要保存文件当前状态的引用,所以我有一些东西需要对它进行比较。

这只占最终总数的1/6左右,因此欢迎任何速度提升。

1 个答案:

答案 0 :(得分:1)

虽然它并没有真正检查文件的内容,但您可以使用文件系统属性作为监视更改的简单方法。除非在禁用时间戳的情况下挂载文件系统,否则您可以监视访问时间和修改时间戳:

stat -f "%m" <filename>

文件系统驱动程序知道何时发生读取和写入,然后更新时间戳。