date コマンドをさらに、見なおしてみた。意外と使えるんじゃないかと思うんですね。
dateコマンドを活用するのに最初に覚えること
- ”+ 1day”
- %F オプション
これを覚えとくだけで、そこそこ使い勝手がいい。
実例
ある日から90日後を探す
takuya@atom:~$ date --date "2012/11/22 + 90days" +"%F" 2013-02-20
ね?便利でしょ
--date で日付を指定
+"%F" で %Y-%m-%d の省略形
takuya@atom:~$ date --date "2011/11/22" +"%F" 2011-11-22
最初に、以上を覚えておけば、直ぐ使えます。
それでは、使い込んでみましょう
相対的日時を求める
ある日から、一ヶ月後
takuya@atom:~$ date --date "2012/11/22 + 1month" +"%F" 2012-12-22
ある日から、1日前
takuya@atom:~$ date --date "2012/3/1 - 1days" +"%F" 2012-02-29
オプションをもうちょっと。
もうちょっと細かく使い込む。
オプションの重ね書きが可能
takuya@air:~/Desktop$ date --date "today next monday next month" +"%F" 2012-12-26
去年のクリスマスは何曜日?
takuya@air:~/Desktop$ date --date "2012/12/25" +"%F(%a)" 2012-12-25(火)
特定の日を調べたければ、calコマンド使えって話ですけどね。
毎月の最初の月曜日を求める。
毎月の最初の月曜日を求める。
date --date "this month next monday " +"%F" 2021-03-08
毎月の最後の月曜日を求める。
月の最後の月曜日を求めるには、いったん翌月1日を得たあとに、そこから直近月曜日をさかのぼり求めておけばできる。
$ date --date "next month last monday " +"%F" 2021-03-22
コマンドを更に組合わせる
date コマンドが相対日付を扱えるので、日付をまとめて作るのがとても簡単
takuya@air:~/Desktop$ for i in {0..30}; do date --date "2012-11-01 +$i days" +"%F" ; done 2012-11-01 2012-11-02 2012-11-03 2012-11-04 2012-11-05 2012-11-06 2012-11-07 2012-11-08 2012-11-09 2012-11-10 2012-11-11 (中略 2012-11-27 2012-11-28 2012-11-29 2012-11-30 2012-12-01
直近30日の日付をパパっと作れるのですね。これは便利ですね。
さらに、バッククオートと組合わせる。
日付でディレクトリやファイルを作ることが出来るよね。
takuya@air:~/Desktop/date$ for i in {0..30}; do mkdir `date --date "2012-11-01 +$i days" +"%F"` ; done takuya@air:~/Desktop/date$ ls 2012-11-01 2012-11-05 2012-11-09 2012-11-13 2012-11-17 2012-11-21 2012-11-25 2012-11-29 2012-11-02 2012-11-06 2012-11-10 2012-11-14 2012-11-18 2012-11-22 2012-11-26 2012-11-30 2012-11-03 2012-11-07 2012-11-11 2012-11-15 2012-11-19 2012-11-23 2012-11-27 2012-12-01 2012-11-04 2012-11-08 2012-11-12 2012-11-16 2012-11-20 2012-11-24 2012-11-28
おお、コマンド使える。
昨日のバックアップを定期的に取るなら
rsync -avz --no-P /var/www /var/backup/`date --date="yesterday"`
これをcronに書けばいいですね。
ちなみに、date コマンドが使ってる日付フォーマットは
man strftime
で見ることができます。
-d は --date オプションでも可能
takuya@air:~/Desktop$ date -d "2012/12/25" +"%F(%a)" 2012-12-25(火)
GNU date の書式
これらは、GNU Coreutilsの date コマンドの書式になるので、gnu date を内部的に呼び出しているようなプログラム言語や、互換性があるものは概ね紹介した ` next month ` ` 3 days ago ` などが使える。
https://www.gnu.org/software/coreutils/manual/html_node/Examples-of-date.html
参考資料
man date
man strftime
http://jp2.php.net/manual/en/datetime.formats.relative.php
2021-03-01 更新
毎月の最初の月曜日・最後の月曜日求める方法を記載。gnu date について言及