Skip to content

Change the case of filenames with Zsh

Today, after importing photos from my iPhone to my Mac, I noticed their filenames were all uppercase whereas I want them to be all lowercase. This is a task zsh can perform easily with a oneliner.

The files before the renaming.

IMG_4575.PNG
IMG_4576.PNG
IMG_4577.PNG

This oneliner iterates over the files whose name starts with IMG and ends with .PNG and rename each one to lowercase.

for file in IMG*.PNG ; do  mv $file ${file:l}  ; done
The key trick here is ${file:l} (with an 'l' as in lowercase) that outputs the content of the variable file all lowercase.

The files have been successfully renamed all lowercase.

img_4575.png
img_4576.png
img_4577.png

Should you need to perform the opposite ie. convert the file names to uppercase, use ${file:u} instead, like so:

for file in img*.png ; do  mv $file ${file:u}  ; done