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

Linux 获取自上次修改文件以来的天数,linux,shell,unix,scripting,Linux,Shell,Unix,Scripting,我想获取从文件上次修改日期到今天的日期的天数 我使用这个$ls-l uname.txt | awk'{print$6,“,$7}',但它给出了最后修改的日期。我想知道从上次修改日期到今天的日期的天数 有什么办法吗?您可以使用date-r来告诉您文件的修改日期,而不是使用ls。除此之外,date的%s说明符对计算也很有用,该说明符将日期的格式设置为从纪元开始的秒数。将这两种方法结合起来,可以轻松获得所需的天数: mod=$(date -r uname.txt +%s) now=$(date +%s

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

我使用这个
$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)

@Stunner
86400=24*60*60
(即一天中的秒数)尽管最后修改的日期不同,但上面的脚本对所有文件给出了相同的答案,即15981。@Stunner您如何调用脚本?您是否知道它会无条件地检查
uname.txt
?@Stunner如果要将文件传递到脚本中,请将
uname.txt
替换为
$1