【问题标题】:Get the number of days since file is last modified获取自上次修改文件以来的天数
【发布时间】:2013-10-03 05:33:09
【问题描述】:

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

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

有什么办法吗?

【问题讨论】:

    标签: linux shell unix scripting


    【解决方案1】:

    尝试创建一个脚本:

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

    【讨论】:

    • @Stunner 86400 = 24*60*60(即一天中的秒数)
    • 不知何故,上面的脚本给了我相同的答案,即所有文件的 15981,即使最后修改日期不同。
    • @Stunner 你是如何调用脚本的?你知道它无条件检查uname.txt吗?
    • @Stunner 如果要将文件传递到脚本中,请将 uname.txt 替换为 $1
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 2013-10-28
        • 2022-08-18
        • 2021-09-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-03-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多