シェルスクリプトで変更された日付と現在の日付の違いを取得するには? [閉鎖]

シェルスクリプトで変更された日付と現在の日付の違いを取得するには? [閉鎖]
#!/bin/bash
echo "hi"
path="/home/alert/VideoApplicationAPI.v1/logs"
dayDiff=365

DATE=`date +%Y-%m-%d`
for filename in $path/*.*; do
    modDate=$(stat -c %y  "$filename") 
    #modDate=$(date -r   "$filename"+%s) 
    modDate=${modDate%%  *}
    echo $filename:$modDate

    #lastUpdate=$(stat -c %y "$filename")
    now="$(date +%s)"
    diff="${now}-${lastUpdate}"
done

echo $DATE 

答え1

配信に近いこの問題。そのスクリプトをフォーマットに合わせて調整すると、次のコマンドセットが提供されます。

echo "$(( $(date -d "$d2" +%s) - $(date -d "$d1" +%s) )) / 86400" | bc -l

ここで、$ d1はより小さい(以前の)日付であり、$ d2はより大きい(以降)日付です。

したがって、私が知っている限り、次の方法が必要です。

echo "$(( $(date -d "$modDate" +%s) - $(date -d "$now" +%s) )) / 86400" | bc -l

言う、

bc -l

マニュアルページによると、

...任意の精度数値をサポートし、インタラクティブにステートメントを実行する言語です。構文はCプログラミング言語といくつか似ています。

ほとんどのシェルは整数除算のみをサポートしているため、答えから10進数を取得できます。

答え2

ここで何を修正したいのか分かりません。私が知っている限り、これはstat -cGNU statでのみ動作し、stat -c %y出力をフォーマットで提供します2019-03-14 14:21:32.704211521 +0200。両方のスペースの後ろにあるエントリを削除しようとしましたが、機能しません。


とにかくタイムスタンプの算術演算を実行するには、エポック以降の秒で考えることをお勧めします。つまり-c %Y-c %y。次に、秒単位の差を得るには、$(( .. ))シェルで算術拡張を使用できます。

$ diff=$(( "$(date +%s)" - "$(stat -c %Y "$file")" ))
$ echo $diff
86527

時間、分、秒を取得するには、適切な除算を実行し、残りを取ります。

$ s=$(( diff % 60 )); m=$(( diff / 60 % 60 )); h=$(( diff / 3600 ))
$ printf "%d:%02d:%02d\n" "$h" "$m" "$s"
24:02:07

または、たとえば、10bc進数の日数で時間を取得するには、次のように使用します。@Pheriの返信見せる

関連情報