ディレクトリ内のデタラメな *.jpg と *.jpeg ファイルをこんな感じでまとめてリネーム。
$ ls
aaa.txt asdf.jpg poiuy.jpg qwer.jpg sngk38.jpeg
$ i=1; for f in *.jpg *.jpeg; do g=000$i.jpg; mv $f hoge_${g:(-8)}; i=$((i+1)); done
$ ls
aaa.txt hoge_0001.jpg hoge_0002.jpg hoge_0003.jpg hoge_0004.jpg
ナンバリングの処理は、数値演算構文の $((数値演算式)) を利用して i=$((i+1)) という記述で i を数値としてインクリメント。
リネーム後ファイル名の生成部分は、g=000$i.jpg と ${g:(-8)} の部分。
g=000$i.jpg で、4桁にするために i が最小値1のときに0でパディングするような書き方。
数値が i=10 以上の2桁になっても大丈夫なように、文字列の後ろから8文字分だけをファイル名として扱うようにしている。
${g:(-8)} が、文字列の置換演算子(substr, substring的な処理)で後ろから8文字抜き出す処理。
0001.jpg => これの後ろから8文字を抜き出して => 0001.jpg
00010.jpg => これの後ろから8文字を抜き出して => 0010.jpg
その後、プレフィックスとして今回は hoge_ という文字列をつなげている。
環境: Mac OS X Lion
$ sh --version
GNU bash, version 3.2.48(1)-release (x86_64-apple-darwin11)
Copyright (C) 2007 Free Software Foundation, Inc.
$ uname -mvsr
Darwin 11.0.1 Darwin Kernel Version 11.0.1: Wed Jun 29 19:53:22 PDT 2011; root:xnu-1699.23.2~1/RELEASE_X86_64 x86_64
tags: bash
Posted by NI-Lab. (@nilab)