Renaming a bunch of files using Command-line

Suppose I have a folder with thousands of photos named all randomly. How can one rename them as photo1, photo2,...,photo1000 from the command-line/terminal?


I will assume that you want to keep a proper suffix on the filenames:

c=1; for f in *.jpg ; do mv "$f" "photo$c.jpg" ; c=$(($c+1)) ; done

Notes

  • c=1: This initalizes the counter. You can set it to any number you like.

  • for f in *.jpg ; do: This signifies the beginning of a shell for-loop. While much of shell-scripting can be difficult to make work when file names can contain spaces, newlines or other difficult characters, this construction is safe against even the most hostile file names.

  • mv "$f" "photo$c.jpg": This uses the counter c and does the actual renaming of files. The file name $f is in double-quotes to protect the name from the various possible shell expansions.

  • c=$(($c+1)): This increments the counter for the next loop

  • done: The signifies the end of the for loop.


You can use this code :

for i in *.jpg; do let j+=1 ; mv "$i" "photo$j.jpg" ; done