自上次修改文件以来,我需要以秒为单位获取时间。 ls -l
没有显示出来。
问问题
67736 次
3 回答
95
的 GNU 实现date
可以-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)))
不幸的是(例如在 Mac OS X 中)的 BSD 实现date
不支持该-r
标志。要获得最后修改秒数,您可以改用该stat
命令,正如其他答案所建议的那样。一旦你有了它,剩下的过程与计算经过的秒数相同。
于 2013-10-19T08:57:34.070 回答
10
我知道标签是 Linux,但stat -c
语法在 OSX 上对我不起作用。这确实有效...
echo $(( $(date +%s) - $(stat -f%c myfile.txt) ))
并作为使用文件名调用的函数:
lastmod(){
echo "Last modified" $(( $(date +%s) - $(stat -f%c "$1") )) "seconds ago"
}
于 2013-10-19T07:18:45.190 回答
8
在 BASH 中,使用自上次修改后的秒数:
expr `date +%s` - `stat -c %Y /home/user/my_file`
于 2013-10-19T07:03:05.653 回答