Sto*_*ica 76
GNU实现date有一个-r选项来打印文件的最后修改日期而不是当前日期.我们可以使用格式说明符%s来获取以秒为单位的时间,这样便于计算时差.
lastModificationSeconds=$(date +%s -r file.txt)
currentSeconds=$(date +%s)
Run Code Online (Sandbox Code Playgroud)
然后您可以使用算术上下文来计算差异,例如:
((elapsedSeconds = currentSeconds - lastModificationSeconds))
# or
elapsedSeconds=$((currentSeconds - lastModificationSeconds))
Run Code Online (Sandbox Code Playgroud)
您还可以在没有临时变量的情况下直接计算和打印经过的秒数:
echo $(($(date +%s) - $(date +%s -r file.txt)))
Run Code Online (Sandbox Code Playgroud)
不幸的是,BSD的实现date(例如在Mac OS X中)不支持该-r标志.要获得最后一次修改秒数,您可以使用该stat命令,而不是其他建议的答案.完成后,其余步骤与计算经过的秒数相同.
在 BASH 中,自上次修改以来使用它几秒钟:
expr `date +%s` - `stat -c %Y /home/user/my_file`
Run Code Online (Sandbox Code Playgroud)
我知道标签是Linux,但stat -c语法在OSX上对我不起作用.这确实有效......
echo $(( $(date +%s) - $(stat -f%c myfile.txt) ))
Run Code Online (Sandbox Code Playgroud)
并且作为使用文件名调用的函数:
lastmod(){
echo "Last modified" $(( $(date +%s) - $(stat -f%c "$1") )) "seconds ago"
}
Run Code Online (Sandbox Code Playgroud)