Linuxには次のログファイルがあります。
Mar 2 09:46:45 [rest of the log]
Debian Linuxの多くのサービスログには年情報が含まれていないため、私の考えでは、ログは最近のイベントを示唆しているようです。
このログ行が最後の10分かどうかを確認したいので、次のようにしました。
Now="$(date '+%b %d %H:%M:%S')"
echo "Now : $Now"
TENMINSEC=$(date -d 'now - 10 minutes' '+%s')
echo "Ten min before : ${TENMINSEC}"
LOGDAT=$(date -d 'Mar 2 09:45:40' '+%s')
echo "LOGDAT : ${LOGDAT}"
if [ $LOGDAT -ge $TENMINSEC ];then
echo "Log date is greater";
fi
LOGDATと最近10分を秒に変換して比較します。
しかし、私が望むことをしているのは混乱していますか?年情報が含まれていない場合、結果に影響はありませんか?どうすれば解決できますか?
添付:
ログファイル行の読み込みに問題はありません。ログファイルから読み取った内容は、コードの日付(3月2日09:45:40)に置き換えられます。
答え1
日付文字列に年が指定されていない場合、GNU date
(使用中のように見える)は日付が現在の年を参照していると仮定します。
$ date -d 'Mar 2 09:45:40'
Sat Mar 2 09:45:40 CET 2019
したがって、この日付をUnix時間に変換して同じ形式の他の日付と比較することは、新年の前日が真夜中であることを除いて正しいことを行います。
答え2
特定の日付に対してdateコマンドが生成する内容がわからない場合は、いつでも試してみることができます。この特定の場合は、削除して+%s
結果を読み取ることができます。
date -d 'Mar 2 09:45:40' # "02 Mar 2019 09:45:40"
あるいは、epochの後の秒数が与えられたら、値を再読み込み可能な日付に変換することもできます。
time=1546300800
date --date "@$time" # "01 Jan 2019 00:00:00"