dateコマンドの「1ヶ月前」オプションはどのように機能しますか?

dateコマンドの「1ヶ月前」オプションはどのように機能しますか?

現在の日付内で過去の日付を取得できるのか、それとも30日か31日だけが必要かはわかりません。

例えば

現在の日付がMarch 28th1ヶ月前であれば、February 28th1ヶ月前に何が起こりましたかMarch 30th

想像する

$(date +%Y%m%d)毎日いくつかのファイルをバックアップしたいです。スクリプトは、これらのファイルを現在の日付内の形式で保存します。たとえば、20150603_bckp.tar.gz次の月が来ると、1日と15日のファイルを除いて、1か月前のすべてのファイルが削除されます。だからここに私はケースがあります:

past_month = $(date -d "-1 month" +%Y%m%d)
day = $(date +%d)
if [ "$day" != 01 ] && [ "$day" != 15 ]
then
    rm /path/of/files/${past_month}_bckp.tar.gz
    echo "Depuration done"
else
    echo "Keep file"
fi

しかし、日付が30日、31日、または過去2月であった場合はどうなりますか?そのファイルは保存されますか?それとも最初の日からファイルを削除しますか?

31日になるとPurgeをすることになるが、先月が30日しか残っていなかった場合、1日目からファイルが削除されるのでしょうか?

私がそれを暗示したら良かったでしょう。

ベストアンサー1

- 1 month月番号から1を引いた後、結果の日付が無効な場合(たとえばFebruary 30)有効になるように調整されます。また、11月の日でDecember 31 - 1 monthはなく、(うるう年に実行されない限り)そうです。December 1March 31 - 1 monthMarch 3

ここに引用された内容は情報ページGnu datedateこの構文を実装するバージョン)の場合、算術をより強力にするための良い提案が含まれています。

ユニットがあいまいな場合、関連プロジェクトに問題が発生する可能性があります。たとえば、2003-07-31 -1 month2003-06-31は無効な日付であるため、2003-07-01として計算できます。前月をより確実に確認するには、今月15日前の月をリクエストできます。たとえば、

    $ date -R
    Thu, 31 Jul 2003 13:02:39 -0700
    $ date --date='-1 month' +'Last month was %B?'
    Last month was July?
    $ date --date="$(date +%Y-%m-15) -1 month" +'Last month was %B!'
    Last month was June!

情報ページでも引用されている別の警告:

また、時計の変更(たとえば、夏時間のジャンプなど)に合わせて日付を操作するときは注意してください。場合によっては、時計に24時間を加算または減算するため、TZカレンダーの計算を開始する前に環境変数をに設定して標準時を採用することが賢明なことがよくあります。UTC0

おすすめ記事