Bash – rename directory of images numeric

bashrename

I'm trying to rename a directory full of images like so:

test.jpg
funny.gif
sad.png
filename.PNG
filenaaskjas.JPG

to:

1.jpg
2.gif
3.png
4.png
5.jpg

I've got it working except for the uppercase –> lowercase conversion:

i=1;
shopt -s nullglob;
for f in *.jpg *.gif *.png *.jpeg *.JPG *.JPEG *.GIF; do
    mv -- "$f" "$i.${f##*.}";
    ((i++));
done

I also want jpeg to become jpg.

Best Answer

Try something like

ext=$( echo "$i.${f##*.}" | tr [A-Z] [a-z] )
mv -- "$f" $i$ext

or for fixed length file names.

dest=$(printf '08d%' $9)$( echo "$i.${f##*.}" | tr [A-Z] [a-z] )
mv -- "$f" $dest

c

Related Question