3
4

More than 5 years have passed since last update.

[bash] ファイル名の日付とか連番を解決する

Last updated at Posted at 2014-10-31
  • 日付を含むファイルに対する処理を自動化したい
  • 連番で順次処理(例えば複数サーバーにリモートシェル実行)を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

これでログ漁りが捗る :metal:

3
4
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4