ファイルの最終更新日から今日までの日数を取得したい。
私はこれを使用します$ ls -l uname.txt | awk '{print $6 , "", $7}'
が、最終更新日を教えてくれます。最終更新日から今日までの日数を知りたいです。
これを行う方法はありますか?
を使用する代わりに、 をls
使用date -r
して、ファイルの変更日を通知できます。それに加えて、エポックからの日付を秒単位でフォーマットするdate
の%s
指定子は、計算に役立ちます。2 つを簡単に組み合わせると、目的の日数が得られます。
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
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)