シェルスクリプトでファイルの最終更新からの経過日数を取得する
シェルスクリプトで/path/to/file
というパスにあるファイルの最終更新からの経過日数を取得するには以下のようにする。
days=$(($(($(date +%s) - $(date -r /path/to/file +%s))) / 86400))
echo $days
以下それぞれの部分の解説。
$(date +%s)
$(コマンド)
の形式でコマンドの実行結果を変数に代入できる。(コマンド置換)
date
コマンドを+%s
でフォーマットするとUnix時間を取得できる。
$ date +%s
1697805102
これで現在の時間をUnix時間で取得できる。
$(date -r /path/to/file +%s)
date
コマンドに-r
オプションを付けると指定したファイルの最後に更新した時間を取得できる。
上記と同じく+%s
でフォーマットしているのでUnix時間で取得している。
$ date -r /path/to/file +%s
1688296179
$((式))
$((式))
の形式で数式を評価できる。
$ echo $((1 + 2))
3
$(($(date +%s) - $(date -r /path/to/file +%s)))
で「現在の時間 - ファイルの最後の更新時間」を計算している。
$ echo $(($(date +%s) - $(date -r /path/to/file +%s)))
9509131
得られる結果は秒なので$((式 / 86400))
で日数に変換している。
$ echo $(($(($(date +%s) - $(date -r /path/to/file +%s))) / 86400))
110
\第一線のプログラマーの行動原理を学べる!/