7

我想获取自文件上次修改日期到今天日期的天数。

我使用它$ ls -l uname.txt | awk '{print $6 , "", $7}' ,但它给了我最后修改的日期。我想知道从上次修改日期到今天的日期的天数。

有什么办法可以做到这一点?

4

3 回答 3

6

除了使用ls,您可以使用date -r告诉您文件的修改日期。除此之外,date's%s说明符,它以自纪元以​​来的秒数为单位格式化日期,对计算很有用。将两者结合起来很容易得到所需的天数:

mod=$(date -r uname.txt +%s)
now=$(date +%s)          
days=$(expr \( $now - $mod \) / 86400)
echo $days
于 2013-10-03T05:44:36.277 回答
2

尝试创建一个脚本:

#!/bin/bash

ftime=`stat -c %Y uname.txt`
ctime=`date +%s`
diff=$(( (ctime - ftime) / 86400 ))
echo $diff
于 2013-10-03T05:44:47.933 回答
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)
于 2016-05-01T02:13:21.110 回答