【问题标题】:Bash to get timestamp from file list and compare it to filenameBash 从文件列表中获取时间戳并将其与文件名进行比较
【发布时间】:2012-10-27 01:34:31
【问题描述】:

为一个项目实施 GIT 存储库,我们通过在部署的提交后挂钩上生成转储来包含数据库结构。

我想要的是一个简单的文件版本控制系统,该系统基于对表结构的最后一次更改的时间戳。

在找到this post 并建议检查 MySQL 数据目录中 *.frm 文件的日期后,我认为解决方案是根据最后一个日期作为生成文件的一部分来实施它。这是:

  1. 通过 ls 命令(类型为 ls -la *.frm)找出数据库文件(即 /var/lib/mysql/databaseX/)的最新日期时间

  2. 将该值(最后更改的文件)与某个文件(即 /project/dump_2012102620001.sql)的值进行比较,其中数字对应于最后生成的转储。

  3. 如果文件时间戳在该日期之后,则生成 mysqldump 命令,否则忽略,因此不会生成转储,并且 作为对 GIT 的更改提交

不幸的是,我的 Linux 控制台/bash 概念还远远不够,还没有找到任何类似的脚本可以使用。

【问题讨论】:

    标签: linux bash


    【解决方案1】:

    您可以使用[[ file1 -ot file2 ]] 来测试file1 是否比file2 旧。

    last=$(ls -tr /path/to/db/files/*.frm | tail -n1)
    if [[ dump -ot $last ]] ; then
        create_new_dump
    fi
    

    【讨论】:

    • 代码工作正常,感谢您的提示,但不幸的是,由于 GIT 文件的性质,时间戳不会保留并适用于结帐完成的时间 (stackoverflow.com/questions/1964470/…)。这会导致问题,因为存储库中的转储文件不会维护它创建的日期时间,因此比较不可信:(
    【解决方案2】:

    您可以通过每次使用适当的mysqldump 命令转储表结构来省去很多麻烦,因为它相对轻量级,因为它不包含表内容。去掉最上面的可变时间戳信息,和之前的文件比较。如果不同,请存储。

    【讨论】:

    • 这听起来确实是一个合理的选择。转储需要几秒钟。我将不得不收集如何去除那条线或忽略差异......“转储于 2012 年 10 月 31 日 9:13:56 完成”
    • 需要一些 bash 编码,但这个根目录的一个不错的选择是使用 diff 参数“–ignore-matching-lines”,即 diff mysqldump2.sql mysqldumped.sql –ignore-matching-lines="转储完成于“
    猜你喜欢
    • 2022-11-23
    • 2022-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多