【发布时间】:2013-10-28 02:30:11
【问题描述】:
我需要获取自上次修改文件以来的时间(以秒为单位)。 ls -l 没有显示。
【问题讨论】:
我需要获取自上次修改文件以来的时间(以秒为单位)。 ls -l 没有显示。
【问题讨论】:
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 命令,正如其他答案所建议的那样。
一旦你有了它,剩下的过程就是计算经过的秒数。
【讨论】:
$(($(date +'%s%N' -r file.txt)/1000000))
date -r file.txt +%s 和 echo $(($(date +%s) - $(date -r file.txt +%s)))
date -r,只要你按照这个顺序使用:date -r file.txt +%s
我知道标签是 Linux,但 stat -c 语法在 OSX 上对我不起作用。这确实有效...
echo $(( $(date +%s) - $(stat -f%c myfile.txt) ))
并且作为一个使用文件名调用的函数:
lastmod(){
echo "Last modified" $(( $(date +%s) - $(stat -f%c "$1") )) "seconds ago"
}
【讨论】:
-f%c 给出了一个错误。使用stat -c%Y "$1" 有效。
-c%Y 不适用)。你在 El Capitan 上吗?
date -r file.txt +%s 对我有用,它似乎也适用于某些 linux,但显然它不是 POSIX,所以可移植性是可疑的..
在 BASH 中,使用自上次修改后的秒数:
expr `date +%s` - `stat -c %Y /home/user/my_file`
【讨论】: