【问题标题】:compare file's date bash比较文件的日期 bash
【发布时间】:2013-01-26 00:05:24
【问题描述】:

我正在开发一个类似于 Dropbox 的小型 bash 脚本,如何在不使用 rsync 的情况下比较 2 个文件的日期并用新文件替换旧文件 有什么简单的方法来处理这个吗? SHA1 可以帮助我了解更新吗?

【问题讨论】:

  • 这真的取决于“文件日期”的含义。您可能指的是mtime,但特异性很好。
  • @WilliamPursell,我的意思是最后一次修改
  • 作为记录,SHA1 绝对不会透露任何有关文件年龄、名称或内容的信息。

标签: linux bash centos


【解决方案1】:

您可以使用-nt(新于)和-ot(旧于)运算符比较文件修改时间与test

if [ "$file1" -ot "$file2" ]; then
    cp -f "$file2" "$file1"
fi

【讨论】:

  • 太棒了 :))) 从来没有想过简单的比较可以完成这项工作,因为我是 centOS 的新手 :) 谢谢你 :)
  • -nt 似乎意味着比年龄新或相同。
  • @JoeC 我测试过,如果相同年龄返回 1(touch -r ... 之后)
  • "$file1" not present 意味着 true / cp ... ?
【解决方案2】:

这是一个 POSIX 解决方案:

find -name file2 -newer file1

【讨论】:

    【解决方案3】:

    或者更短更好看,看man stat

    stat -c %y file
    

    【讨论】:

    • 自纪元以来使用 %Y 秒,更容易使用。
    • 不过,这不是便携式的。 POSIX stat 有一组相当令人沮丧的选项。
    • 对于遇到此问题的其他人:如果FILE 是指向另一个文件的符号链接,则stat -c %Y FILE 将输出符号链接的最后修改日期,不是链接指向的文件。在这种情况下使用stat -L -c %Y FILE
    【解决方案4】:

    怎么样

     stat file|awk -F': ' '/Modify: /{print $2}'
    

    【讨论】:

    猜你喜欢
    • 2015-01-01
    • 2022-10-23
    • 1970-01-01
    • 2017-02-18
    • 2015-05-20
    • 1970-01-01
    • 2014-03-05
    • 1970-01-01
    • 2017-08-26
    相关资源
    最近更新 更多