Renumber files

From CCP4 wiki

Let's say you have a list of images named something_###.img with ### spanning 381-560, and you want to renumber them to be from 1 to 180.


Bash/awk one-liner[edit]

 echo | awk '{for(i=1;i<181;i++) printf "mv something_%03d.img something_%03d.img\n",i+380,i;}' | bash -sf

will do it. Notice that "%03d" will make sure that numbers are padded with zeros (and if you need 4 digits total, just use %04d instead). Also, always pipe it to less first before piping to bash, just to make sure that you are not going to inadvertently delete something.

Bash one-liner[edit]

 c=1 && for f in something_{381..560}.img ; do mv $f something_`printf "%03d" "$c"`.img ; c=$(($c+1)) ; done

Bash script[edit]

 #!/bin/bash
 # set your first desired image number
 c=1
 
 # loop on the input file names.  the {X..Y} is called brace expansion.
 for f in something_{381..560}.img ; do
 
 # infinitely useful printf as you noted
   mv $f something_`printf "%03d" "$c"`.img
 
 # increment the counter
   c=$(($c+1))
 done # loop ends

Perl one-liner[edit]

 perl -e 'for(<*>) {rename $_,$1.($2-380).$3 if /(.+?)(\d+)(.img)$/}' 

Back to Useful scripts (aka smart piece of code)