比较文件的日期 bash

Posted

技术标签:

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

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

【问题讨论】:

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

【讨论】:

这个帮助我完成了我想要完成的工作。现在,如何比较那些时代?我正在使用这里找到的答案:***.com/questions/8116503/…Perfect!

以上是关于比较文件的日期 bash的主要内容,如果未能解决你的问题,请参考以下文章

在bash shell 上如何按字母顺序比较两个字符串 ?

将修改后的文件日期与批处理文件中的当前日期进行比较

关于SHELL脚本中日期大小的比较

将符号链接及其目标与 bash test -ef 进行比较

比较C中两个文件的日期和时间[关闭]

shell脚本 - 日期比较与判断