4

I found an answer for zero-padding numerical filenames which works fine for renaming filenames as follows :

1.jpg > 00001.jpg
2.jpg > 00002.jpg
.
.
.
9.jpg > 00009.jpg

That uses the following command:

rename 's/\d+/sprintf("%05d", $&)/e' *.jpg

But my filenames aren't numeric. They are an alphanumeric sequence, like: a.jpg, b.jpg, c.jpg...... m.jpg.

In a similar way to the original question, I want to rename these so they display in the correct sequence. How do I do this?

1
  • 1
    What would the correct sequence be? 0a.jpg? aaaaa.jpg? Do you want to rename them to 00001.jpg .. 00009.jpg?
    – terdon
    Sep 28, 2015 at 13:53

1 Answer 1

7

You can zero-pad letters too, you just need to alter my original command slightly to:

rename 's/\w+/sprintf("%05s", $&)/e' *.jpg

We're basically just saying, replace the first "word" (numbers and letters) with a zero-padded string. It's very similar to the original, it's just slightly different. This version wold work for the original problem.

You could expand it into a .+ match (to zero pad everything), but then you might need to handle the extension on top.


Test harness:

$ mkdir test; cd test; touch {a..d}.jpg 1.jpg
$ rename 's/\w+/sprintf("%05s", $&)/e' *.jpg
$ ls
00001.jpg  0000a.jpg  0000b.jpg  0000c.jpg  0000d.jpg

You must log in to answer this question.