Linuxのインストール時間を日単位で表示するスクリプト

Linuxのインストール時間を日単位で表示するスクリプト

Ageこのスクリプトを呼び出すコマンドを作成したいと思います。

From=$(stat / | grep "Birth" | sed 's/Birth: //g' | cut -b 2-11)
echo $From
Now=$(date)
echo $Now

ところで、引き続きこの2つの日付を差し引きます。

2022-05-07どのようにそれらを差し引くのと同じ日付/時間と混同されないかを確認できますか2022-07-05?私の言葉は、今が何月で、何曜日ですか?

この混乱を避けるために、コマンド形式をstatもう少し説明的に変更してから、2つの日付が同じ形式であることを確認してから減算する必要があると思います。しかし、どうすればいいのかわかりません。

ベストアンサー1

この答えは間違っています! ! !差は秒単位で手動で計算する必要があります。表示コマンドを使用して、date月、現在の日付の日数、および数秒数だけを表示します1970-01-01


私はそうします:

#!/bin/bash

d1=$(date -d "$(stat / | grep "Birth" | sed 's/Birth: //g')" +%s)
d2=$(date +%s)
date -d "@$(($d2 - $d1))" +'%m months, %d days, %H hours'

数秒で2回取得します。これを除いて希望の形式で表示してください。この場合、月、日、時間単位です。好きなように変更できます。man dateどの出力形式オプションがあるかを確認してください。

日付形式YYYY-MM-DDの混乱に関して、コンピュータはそれをYYYY-DD-MMとして誤って解釈することを見たことがありません。


muruのコメントに基づいて追加されました(oneliner):

date -d "@$(($(date +%s) - $(stat / --format %W)))" +'%m months, %d days, %H hours'

@Saeed Neamatiのコメントの後に追加されました。以下の答えはより良い解決策を提供します。まだ100%正確ではありません。

最初のオプション 差を計算し、その差を1970-01-01に追加すると、1970-01-01との年、月、日の差を表示できます。月の長さとうるう年が異なるため、結果は正確ではありません。

seconds=$(date -d "@$(($(date +%s) - $(stat / --format %W)))" +%s)
years=$(($(date -d @$seconds +%Y) - 1970))
months=$(($(date -d @$seconds +%m) - 1))
days=$(($(date -d @$seconds +%d)))
echo $years years, $months months, $days days

2番目のオプション 別の方法は、2つの日付を取得してその差を計算することです。すべての月が31日ではないため、日数が正しくない可能性があります。

d1_year=$(date -d @$(stat / --format %W) +%Y)
d1_month=$(date -d @$(stat / --format %W) +%-m)
d1_day=$(date -d @$(stat / --format %W) +%-d)

d2_year=$(date +%Y)
d2_month=$(date +%-m)
d2_day=$(date +%-d)

years=$(($d2_year - $d1_year))
months=$(($d2_month - $d1_month))
if (( $months < 0 )); then
    months=$(($months + 12))
    years=$(($years - 1))
fi
days=$((d2_day - $d1_day))
if (( $days < 0 )); then
    days=$(($days + 31))
    months=$((months -1))
fi

echo $years years, $months months, $days days

おすすめ記事