@kyanny's blog

My thoughts, my life. Views/opinions are my own.

Perl で連番のファイル名を作る

seq とか jot とか、どっちがどっちか覚えられないし、 "001.txt" "002.txt" みたいに頭にゼロをつけることができるかどうかもよくわからないので Perl でやったほうが楽だ。

シェルの for in ループと組み合わせると、「デイリーでロテートしてる apache のログファイルを 2008年1月1日から2008年1月27日ぶんまで削除する」とか「mysql の binlog を今書き込んでるファイルとそれより一つだけ古いファイルを除いて全部 gzip 圧縮する」とかが一発でできる。

$ for i in `perl -e 'printf("%0.2d\n", $_) for (1..27)'` ; do rm -f /usr/local/apache/logs/old/access_log.200801$i*.gz ; done

$ for i in `perl -e 'printf("%0.2d\n", $_) for (1 .. 13)'` ; do gzip /usr/local/mysql/var/mysql-bin.$i ; done

追記

半袖さんと emasaka さんからトラックバックをもらった。ありがとうございます。 printf コマンドに算術 for か、どちらも知りませんでした。コマン道は面白いなあ。