- 日付を含むファイルに対する処理を自動化したい
- 連番で順次処理(例えば複数サーバーにリモートシェル実行)をfor文で書きたい
そんな時のTips備忘録。
date
(MacOSXにプリインしてるやつ)
今日の日付をYYYYmmdd
で出力。
$ date +%Y%m%d
20141031
昨日の日付をYYYY-mm-dd
で出力。
$ date -v-1d +%Y-%m-%d
2014-10-30
2000年の2月末日(閏年)を出力。
$ date -v1d -v3m -v0y -v-1d +%Y-%m-%d
2000-02-29
-v
オプション便利。
-v Adjust (i.e., take the current date and display the result of the adjustment; not actually set the date) the second, minute, hour, month
day, week day, month or year according to val. If val is preceded with a plus or minus sign, the date is adjusted forwards or backwards
according to the remaining string, otherwise the relevant part of the date is set. The date can be adjusted as many times as required
using these flags. Flags are processed in the order given.
Linuxに入っているやつはまたオプションが違ったはず(機会があったら追記する)。
連番の解決
for
とBrace Expansionで繰り返し
Brace Expansionとは{1..5}
みたいなやつ。
$ echo {1..5}
1 2 3 4 5
$ for I in {1..5}; do echo $I; done
1
2
3
4
5
printf
で前ゼロ
$ printf "%02i\n" 1
01
for
文で回せばこう。
$ for I in {1..5}; do echo "server-$(printf %02i $I).your.domain"; done
server-01.your.domain
server-02.your.domain
server-03.your.domain
server-04.your.domain
server-05.your.domain
組み合わせる
複数のサーバーにある5日前〜今日までのログファイルをリモートシェルで実行!(確認用に以下ではecho
してる)
$ for I in {1..5}; do for D in {4..0}; do echo "ssh server-$(printf %02i $I).your.domain cat /PATH/TO/log.$(date -v-${D}d +%Y-%m-%d)"; done; done
ssh server-01.your.domain cat /PATH/TO/log.2014-10-27
ssh server-01.your.domain cat /PATH/TO/log.2014-10-28
ssh server-01.your.domain cat /PATH/TO/log.2014-10-29
ssh server-01.your.domain cat /PATH/TO/log.2014-10-30
ssh server-01.your.domain cat /PATH/TO/log.2014-10-31
ssh server-02.your.domain cat /PATH/TO/log.2014-10-27
ssh server-02.your.domain cat /PATH/TO/log.2014-10-28
ssh server-02.your.domain cat /PATH/TO/log.2014-10-29
ssh server-02.your.domain cat /PATH/TO/log.2014-10-30
ssh server-02.your.domain cat /PATH/TO/log.2014-10-31
ssh server-03.your.domain cat /PATH/TO/log.2014-10-27
ssh server-03.your.domain cat /PATH/TO/log.2014-10-28
ssh server-03.your.domain cat /PATH/TO/log.2014-10-29
ssh server-03.your.domain cat /PATH/TO/log.2014-10-30
ssh server-03.your.domain cat /PATH/TO/log.2014-10-31
ssh server-04.your.domain cat /PATH/TO/log.2014-10-27
ssh server-04.your.domain cat /PATH/TO/log.2014-10-28
ssh server-04.your.domain cat /PATH/TO/log.2014-10-29
ssh server-04.your.domain cat /PATH/TO/log.2014-10-30
ssh server-04.your.domain cat /PATH/TO/log.2014-10-31
ssh server-05.your.domain cat /PATH/TO/log.2014-10-27
ssh server-05.your.domain cat /PATH/TO/log.2014-10-28
ssh server-05.your.domain cat /PATH/TO/log.2014-10-29
ssh server-05.your.domain cat /PATH/TO/log.2014-10-30
ssh server-05.your.domain cat /PATH/TO/log.2014-10-31
これでログ漁りが捗る