7

ファイルの最終更新日から今日までの日数を取得したい。

私はこれを使用します$ ls -l uname.txt | awk '{print $6 , "", $7}' が、最終更新日を教えてくれます。最終更新日から今日までの日数を知りたいです。

これを行う方法はありますか?

4

3 に答える 3

6

を使用する代わりに、 をls使用date -rして、ファイルの変更日を通知できます。それに加えて、エポックからの日付を秒単位でフォーマットするdate%s指定子は、計算に役立ちます。2 つを簡単に組み合わせると、目的の日数が得られます。

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

GNU と BSD の stat の違いを、BASH の数学と基本的な読み取り可能な API でまとめることができます。

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 に答える