如何使用bash在文件上次修改后的几秒钟内获得时间?

时间:2013-10-19 06:54:42

标签: linux bash unix

自上次修改文件以来,我需要花费几秒钟的时间。 ls -l没有显示它。

3 个答案:

答案 0 :(得分:74)

date的GNU实现有一个-r选项来打印文件的最后修改日期而不是当前日期。 我们可以使用格式说明符%s来获取以秒为单位的时间, 这便于计算时差。

lastModificationSeconds=$(date +%s -r file.txt)
currentSeconds=$(date +%s)

然后您可以使用算术上下文来计算差异,例如:

((elapsedSeconds = currentSeconds - lastModificationSeconds))
# or
elapsedSeconds=$((currentSeconds - lastModificationSeconds))

您还可以在没有临时变量的情况下直接计算和打印经过的秒数:

echo $(($(date +%s) - $(date +%s -r file.txt)))

不幸的是date的BSD实现(例如在Mac OS X中)不支持-r标志。要获得最后一次修改秒,您可以使用stat命令,而不是其他建议的答案。 一旦你有了这个,剩下的程序就是计算经过的秒数。

答案 1 :(得分:7)

我知道标签是Linux,但stat -c语法在OSX上对我不起作用。这确实有用......

echo $(( $(date +%s) - $(stat -f%c myfile.txt) ))

作为使用文件名调用的函数:

lastmod(){
     echo "Last modified" $(( $(date +%s) - $(stat -f%c "$1") )) "seconds ago"
}

答案 2 :(得分:3)

在BASH中,自上次修改后使用此秒数:

 expr `date +%s` - `stat -c %Y /home/user/my_file`