1

I want rename multiple file like this:

qwsas_1.jpg     >> 0001.jpg
2wase_2.jpg     >> 0002.jpg
swaq2_3.jpg     >> 0003.jpg
qweei_14.jpg    >> 0004.jpg
dadaS_23.jpg    >> 0005.jpg
aswee_35.jpg    >> 0006.jpg

I use this command:

a=1
for i in *.jpg; do
  new=$(printf "%04d.jpg" "$a") #04 pad to length of 4
  mv -- "$i" "$new"
  let a=a+1
done

refer

But result:

qwsas_1.jpg     >> 0001.jpg
qweei_14.jpg    >> 0002.jpg
2wase_2.jpg     >> 0003.jpg
dadaS_23.jpg    >> 0004.jpg
swaq2_3.jpg     >> 0005.jpg
aswee_35.jpg    >> 0006.jpg

What should I do with the code?

Community
  • 1
  • 1
PUSTAKAKORAN.COM
  • 455
  • 1
  • 5
  • 18

1 Answers1

1

You can sort your files by their number part before looping through and renaming them:

a=1
while read -r filename; do
  new=$(printf "%04d.jpg" "$a") #04 pad to length of 4
  mv -- "$filename" "$new"
  let a=a+1
done < <(ls *.jpg | sort -t_ -k2n)

Sample run:

renaming qwsas_1.jpg 0001.jpg
renaming 2wase_2.jpg 0002.jpg
renaming swaq2_3.jpg 0003.jpg
renaming qweei_14.jpg 0004.jpg
renaming dadaS_23.jpg 0005.jpg
renaming aswee_35.jpg 0006.jpg
codeforester
  • 39,467
  • 16
  • 112
  • 140
  • Thank for your answered. I've tried, but it appears an error like this: line 6: /dev/fd/62: No such file or directory. Though that would rename the files still exist – PUSTAKAKORAN.COM Feb 20 '17 at 01:55