Skip to content
Home » Automate Bulk Renaming Files with a Bash Script

Automate Bulk Renaming Files with a Bash Script

Prerequisites

Before diving into the topic, it is important to have a basic understanding of bash scripting. You’ll also need a Unix-based system, such as Linux or macOS. On Windows you can also use WSL2 or a Linux Vagrant Box, which is also a safe way to test your script in a sandbox.

Renaming Files in Bulk with Bash Script

The simplest way to rename files in bulk is to use the mv command. This command can be used to rename a single file, or multiple files if used in a loop. Here is an example of how to rename all the .txt files in a directory to .bak:

for file in *.txt; do
    mv "$file" "${file%.txt}.bak"
done

In this script, the for loop iterates over all the .txt files in the current directory. The mv command then renames each file by appending .bak to the end of its filename. The expression "${file%.txt}" removes the .txt extension from the filename.

Advanced Tips

Here are some advanced tips to make your bulk file renaming process even easier:

Use Variables: You can use variables to store the old and new file extensions, making the script easier to modify and maintain.

old_extension=".txt"
new_extension=".bak"
for file in *"$old_extension"; do
    mv "$file" "${file%$old_extension}$new_extension"
done

Process Directories Recursively: To rename files in subdirectories, you can use the find command to process the files recursively.

old_extension=".txt"
new_extension=".bak"
find . -name "*$old_extension" -exec sh -c 'mv "$0" "${0%$1}$2"' {} "$old_extension" "$new_extension" \\;

Confirmation before change: If you’d like to add a confirmation prompt, you can modify the script as follows:

old_extension=".txt"
new_extension=".bak"
for file in *"$old_extension"; do
    echo "Renaming $file to ${file%$old_extension}$new_extension"
    read -p "Are you sure? (y/n) " -n 1 -r
    echo
    if [[ $REPLY =~ ^[Yy]$ ]]; then
        mv "$file" "${file%$old_extension}$new_extension"
    fi
done

This script adds a confirmation prompt before renaming each file, giving you the chance to review the change before it’s made.

Use Regular Expressions: You can use regular expressions to match specific patterns in filenames and replace them with new strings.

regex="(.*)_[0-9]+"
replacement="\\1"
for file in *; do
    new_file=$(echo "$file" | sed "s/$regex/$replacement/")
    mv "$file" "$new_file"
done

Store the Script: You can store the script in a file with a .sh extension and make it executable to use it on multiple directories.

Risks

When renaming files in bulk, it is important to consider the risks involved. Improper use of bash scripting can lead to unintended consequences, such as overwriting important files. Here are a few tips to help you stay secure while using bash scripts:

  1. Use Absolute Paths: To avoid unexpected behavior, it is recommended to use absolute paths instead of relative paths when specifying the location of files.
  2. Test the Script: Before running the script on your production environment, test it in a safe environment to make sure it produces the desired results.
  3. Verify Inputs: If your script takes user inputs, verify the inputs to make sure they are valid and secure.
  4. Backup Files: It is always a good practice to make a backup of your files before making any changes, in case something goes wrong.
  5. Read the Documentation: Before using any command or tool, it is important to read the documentation and understand how it works and its limitations.

Further Reading

For more information on bash scripting, you can check out the following resources:

Good luck!

Leave a Reply

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

five + 15 =