へっぽこびんぼう野郎のnewbie日記

けろけーろ(´・ω・`)!

ファイル名がImage1.jpg、Image10.jpgみたいなやつを、Image00001.jpg、Image00010.jpgみたいにゼロ埋めするシェルスクリプト

mvzeropad.shなどとつけて保存する

num=$(echo $1 | sed 's/[^0-9]//g')
zeronum=$(printf %05d $num)
mvfile=$(echo $1 | sed "s/$num/$zeronum/g")
mv $1 $mvfile

ふつうのつかいかた

$ sh mvzeropad.sh Hoge1.mp4
Hoge00001.mp4

ファイル全体にやりたい場合

$ ls *.jpg | xargs -n 1 sh mvzeropad.sh

うごかないケースの例

Hoge-2-1.jpg
Hoge-2-10.jpg

Hoge-2-00001.jpgにしたい等

または私は如何にしてwhile read lineをつかうのを止めてパイプラインを愛するようになったか

こっちのほうがパイプで1行1行並列処理するので、びみょうに速いはず

おもったこと

最後の行のmvecho $1 $mvfileにして、
$ ls *.jpg | xargs -n 1 sh mvzeropad.sh | xargs mv $1 $2と書いてあげるほうが
ファイルに限らず、入力を入れると、『その入力の文字列』と『ゼロ埋めした文字列』が出力されるだけなので、汎用性が高まる気がした