【发布时间】:2013-10-03 05:33:09
【问题描述】:
我想获取从文件上次修改日期到今天的天数。
我使用这个$ ls -l uname.txt | awk '{print $6 , "", $7}',但它给了我最后修改的日期。我想知道从上次修改日期到今天的天数。
有什么办法吗?
【问题讨论】:
标签: linux shell unix scripting
我想获取从文件上次修改日期到今天的天数。
我使用这个$ ls -l uname.txt | awk '{print $6 , "", $7}',但它给了我最后修改的日期。我想知道从上次修改日期到今天的天数。
有什么办法吗?
【问题讨论】:
标签: linux shell unix scripting
尝试创建一个脚本:
#!/bin/bash
ftime=`stat -c %Y uname.txt`
ctime=`date +%s`
diff=$(( (ctime - ftime) / 86400 ))
echo $diff
【讨论】:
86400 = 24*60*60(即一天中的秒数)
uname.txt吗?
uname.txt 替换为 $1
您可以使用一些 BASH 数学和基本可读 API 来总结 GNU 和 BSD stat 的差异:
since_last_modified() {
local modified
local now=$(date +%s)
local period=$2
stat -f %m $1 > /dev/null 2>&1 && modified=$(stat -f %m $1) # BSD stat
stat -c %Y $1 > /dev/null 2>&1 && modified=$(stat -c %Y $1) # GNU stat
case $period in
day|days) period=86400 ;; # 1 day in seconds
hour|hours) period=1440 ;; # 1 hour in seconds
minute|minutes) period=60 ;; # 1 minute in seconds
*) period= ;; # default to seconds
esac
if [[ $period > 0 ]]; then
echo "$(( (now - modified) / period ))"
else
echo "$(( now - modified ))"
fi
}
自上次修改后的秒数基本用法:
since_last_modified uname.txt
或分钟保存到变量
minutes_since=$(since_last_modified uname.txt minutes)
【讨论】:
不用ls,你可以用date -r告诉你文件的修改日期。除此之外,date 的 %s 说明符,它以自纪元以来的秒数为单位格式化日期,对计算很有用。将两者结合起来很容易得到所需的天数:
mod=$(date -r uname.txt +%s)
now=$(date +%s)
days=$(expr \( $now - $mod \) / 86400)
echo $days
【讨论】: