Software & AppsOperating SystemLinux

How To Write a Bash Script to Rename Files with a Specific Extension in a Directory

Ubuntu 11

In this article, we will delve into the world of Bash scripting, specifically focusing on how to write a Bash script to rename files with a specific extension in a directory. This is a common task that system administrators and developers often encounter, and automating it can save a lot of time and effort.

Quick Answer

To write a Bash script to rename files with a specific extension in a directory, you can use a loop to iterate over each file and use the mv command to rename the file by changing its extension. Alternatively, you can use the rename utility, which offers more flexibility and power in renaming files.

Understanding Bash Scripting

Before we dive into the script itself, let’s first understand what Bash scripting is. Bash, or the Bourne Again SHell, is a popular command-line interpreter that allows users to interact with the operating system. Bash scripting is writing a series of commands for the shell to execute. It can combine lengthy and repetitive sequences of commands into a single script, which can be stored and executed anytime.

Writing a Bash Script for Renaming Files

Let’s start by writing a simple bash script that can rename all files in a directory. Here is a basic script:


for file in "$1"/*; do
 if [[ -f "$file" ]]; then
 mv "$file" "${file%.*}.bu"

This script does the following:

  • #!/bin/bash is the shebang line that tells the system this is a bash script.
  • for file in "$1"/*; do starts a loop that iterates over each file in the directory specified by the first command-line argument ($1).
  • if [[ -f "$file" ]]; then checks if the current item is a file.
  • mv "$file" "${file%.*}.bu" renames the file by changing its extension to .bu. ${file%.*} is a parameter expansion that removes the shortest match from the end of $file, effectively removing the extension.
  • fi and done end the if statement and the for loop, respectively.

To run the script, you need to make it executable using the chmod +x command. Then, you can run it with the directory as the command-line argument: ./ /path/to/directory.

Using the rename Utility

An alternative way to rename files is by using the rename utility, which is more powerful and flexible. Here’s how you can use it:


rename -v 's/\.[^.]+$/.bu/' "$1"/*

This command does the following:

  • rename -v 's/\.[^.]+$/.bu/' "$1"/* renames all files in the directory specified by $1. The -v option makes the output verbose, meaning it will print detailed information about what the command is doing.
  • 's/\.[^.]+$/.bu/' is a regular expression that matches the file extension and replaces it with .bu.

This script is more concise and can handle more complex renaming tasks, but it requires the rename utility to be installed on your system.


Bash scripting is a powerful tool for automating repetitive tasks on Unix-like operating systems. By writing a simple script or using the rename utility, you can easily rename all files with a specific extension in a directory. Remember to always test your scripts on a small number of files before running them on a large directory to prevent accidental renaming or deletion of files.

We hope this article has been helpful in demonstrating how to write a Bash script to rename files with a specific extension in a directory. For more information on Bash scripting, check out the GNU Bash manual.

What is the purpose of the shebang line `#!/bin/bash` in a bash script?

The shebang line #!/bin/bash is used to specify the interpreter that should be used to execute the script. In this case, it tells the system to use the Bash interpreter to run the script.

What does the parameter expansion `${file%.*}` do in the bash script?

The parameter expansion ${file%.*} removes the shortest match from the end of the $file variable. In the script, it is used to remove the file extension from the filename.

How can I make a bash script executable?

To make a bash script executable, you can use the chmod +x command followed by the script name. For example, chmod +x would make the script named executable.

How do I pass a directory as a command-line argument to the bash script?

You can pass a directory as a command-line argument by specifying the directory path after the script name when running the script. For example, ./ /path/to/directory would pass /path/to/directory as the first command-line argument to the script.

Can I use the `rename` utility on all operating systems?

No, the rename utility may not be available on all operating systems. It is commonly found on Unix-like systems, but may need to be installed separately on some distributions.

Leave a Comment

Your email address will not be published. Required fields are marked *