Ubuntu: Rename Multiple files from terminal

Wajeeh Ahsan
2 min readFeb 19, 2021

--

Renaming, suppose, 100 files manually is quite a headache. Ubuntu provides a simple command to rename files from terminal.

To install rename command, run the following:

sudo apt install rename

Use this command to rename files. Suppose in /home/abc/Files directory, there is a file named HotelDatazzz.txt and I want to rename it to HotelData.txt . For this purpose, first cd to the required directory then run the following command

rename HotelDatazzz.txt HotelData.txt

This will simply rename the file.

Now lets jump to renaming bulk of files. Here are few examples.

Prefix

Add:

rename 's/^/MyPrefix_/' *
  • document.pdf renamed to MyPrefix_document.pdf

Remove:

Also you can remove unwanted strings. Let’s say you had 20 MP3 files named like CD RIP 01 Song.mp3 and you wanted to remove the "CD RIP" part, and you wanted to remove that from all of them with one command.

rename 's/^CD RIP //' *
  • CD RIP 01 Song.mp3 to 01 Song.mp3

Notice the extra space in '^CD RIP ', without the space all files would have a space as the first character of the file. Also note, this will work without the ^ character, but would match CD RIP in any part of the filename. The ^ guarantees it only removes the characters if they are the beginning of the file.

Suffix

Add:

rename 's/$/_MySuffix/' *
  • document.pdf renamed to document.pdf_MySuffix

Change:

rename 's/\.pdf$/.doc/' *

will change Something.pdf into Something.doc. (The reason for the backslash is, . is a wildcard character in regexp so .pdf matches qPDF whereas \.pdf only matches the exact string .pdf. Also very important to note, if you are not familiar with BASH, you must put backslashes in SINGLE quotes! You may not omit quotes or use double quotes, or bash will try to translate them. To bash \. and "\." equals .. (But double-quotes and backslashes are used, for example "\n" for a newline, but since "\." isn't a valid back escape sequence, it translates into .)

Actually, you can even enclose the parts of the string in quotes instead of the whole: 's/Search/Replace/g' is the same as s/'Search'/'Replace'/g and s/Search/Replace/g to BASH. You just have to be careful about special characters (and spaces).

I suggest using the -n option when you are not positive you have the correct regular expressions. It shows what would be renamed, then exits without doing it. For example:

rename -n s/'One'/'Two'/g *

This will list all changes it would have made, had you not put the -n flag there. If it looks good, press Up to go back, then erase the -n and press Enter (or replace it with -v to output all changes it makes).

That’s it :)

--

--

Wajeeh Ahsan
Wajeeh Ahsan

No responses yet