rename_for_tw.pl
某O氏の依頼で作ったrename_for_tw.plですが、今日はそれを作る上での苦労話などを。
手順としては
- まずファイルのリストを読みこむ
- ファイルのリストの配列でforeachをぶん回す
- ファイル名の文字列を置換
- 置換後のファイル名で置換前のファイル名のファイルをリネームする
- 3-4の繰り返し
という感じです。
一番苦労したのは文字を置換する部分。たとえばTWCI_2004_3_15_0_8_32.jpgの1桁の部分を2桁にして(0を補って)TWCI_2004_03_15_00_08_32.jpgという風にするわけで、ぱっと思いついたのは
s/_[0-9]/_0[0-9]/gというもの。ただしこれだと置換結果に[0-9]てのが出てしまうわけで。ならばということで
s/(_)([0-9])/\10\2/gとしてみたものの、"_15"の"_1"にもマッチしてしまう上に\10が1つの変数と見なされてしまってアウト。では
s/(_)([0-9]_)/\10\2/gとするとどうかとやってみましたが、これも\10が1つの変数と見なされる点では変わらず。そこでs/(_)([0-9]_)/\1Z\2/gとすると、\1Zは1つの変数と見なされないようで美味い具合に_3_が_Z3_に変換されるので、その上でs/Z/0/g;としてやれば完了。…と思いきや_0_にマッチした跡はg修飾詞をつけても_8_にはマッチしない(1つ目のアンダースコアにマッチしているので対象から外れる)ので、Zを挿入する置換を2回やった上でZを0に変換する方向で解決。
…つーか30k相応の仕事だと思いました('A`)
| 固定リンク
コメント