linux里最常用测试文件是否存在常用

if [ -f file ]

也用-e是否存在,-f是否是标准文件。

-L 链接

-h 硬链接

等等,-nt -ot -N很少有提及

-nt和-ot是反的,其实一个就好,

[ Afile -nt Bfile ] && echo 'A then B new'

A文件是否比B文件的日期更加新,-ot是比更老,o就是old,n就是new,t就是then,很好记。

对于执行每天记录的工作很有用,有时候没有新消息进来,文件就不会更新,也就不需要执行之后的工作了。

[ Afile -nt ./.Bfile ] && {
echo 'do work' && > ./.Bfile
}

最初的时候./.Bfile有没有,没关系,没有直接就为真。

执行成功工作后,> ./.Bfile更新该文件的时间。直到Afile被更新后。


-N是文件更新后是否被读过

使用在相对封闭的环境,源文件是否被读过,意味着对于源文件的处理已经完成。这要求相对封闭环境,没有无关用户去访问该源文件,造成误判。

[ -N Afile ] && echo read over

它是利用访问时间和修改时间的比较。

使用stat命令可以看到修改时间和访问时间。

命令cat,more等看过文件,就会修改访问时间。

有些mont磁盘的方式可能会造成读过文件后,访问时间并没有及时修改(为了降低访问磁盘的频度),但是对于文件修改后,第一次的读访问操作一定会及时修改访问时间,那些linux大神们已经考虑到-N这个情况,所以不会影响使用。

参考:​Advanced Bash-Scripting Guide​​