繁体   English   中英

获取自上次修改文件以来的天数

[英]Get the number of days since file is last modified

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

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

有什么办法吗?

您可以使用date -r告诉您文件的修改日期,而不是使用ls 除此之外, date%s说明符(用于格式化自纪元以来的秒数)对计算很有用。 将两者结合起来很容易产生所需的天数:

mod=$(date -r uname.txt +%s)
now=$(date +%s)          
days=$(expr \( $now - $mod \) / 86400)
echo $days

尝试创建脚本:

#!/bin/bash

ftime=`stat -c %Y uname.txt`
ctime=`date +%s`
diff=$(( (ctime - ftime) / 86400 ))
echo $diff

你可以用一些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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM