How To Rename Folder In Linux

13 min read

Renaming a folder in Linux is a simple task that can be performed using the command line or a graphical file manager, and it works the same way across most distributions such as Ubuntu, Fedora, Debian, and Arch. Whether you are organizing files, correcting a typo, or preparing a directory for a script, knowing the different methods ensures you can rename directories quickly and safely. Below you will find step‑by‑step instructions, practical examples, and tips to avoid common mistakes Worth keeping that in mind..

Using the mv Command to Rename a Folder

The most universal way to rename a directory in Linux is with the mv (move) command. Although mv is primarily used to move files and folders, it also renames them when the source and destination reside in the same filesystem Still holds up..

Basic Syntax

mv old_folder_name new_folder_name
  • old_folder_name – the current name of the directory you want to change.
  • new_folder_name – the desired name after the operation.

Example

Suppose you have a folder called project_docs inside your home directory and you want to rename it to project_documentation Simple as that..

cd ~
mv project_docs project_documentation

After running the command, ls will show the new name:

ls
# output: project_documentation  other_files ...

Renaming with Paths

You can also specify absolute or relative paths, which is useful when you are not currently inside the parent directory.

mv /home/user/project_docs /home/user/project_documentation

or

mv ./project_docs ../project_documentation

Important Notes

  • If new_folder_name already exists as a directory, mv will move old_folder_name inside that existing directory rather than renaming it. To avoid this, always check that the target name does not exist:

    if [ ! -d "new_folder_name" ]; then
        mv old_folder_name new_folder_name
    else
        echo "Target folder already exists!"
    fi
    
  • The operation is instantaneous because it only updates the filesystem’s inode table; no data is copied or deleted.

Using the rename Command (Perl‑based)

Some Linux distributions ship with a rename utility that uses Perl regular expressions. This tool is handy when you need to rename multiple folders that share a pattern.

Installing rename

On Debian‑based systems:

sudo apt install rename

On Red Hat‑based systems:

sudo dnf install prename   # provides the rename command

Basic Syntax

rename 's/old_pattern/new_pattern/' folders
  • The expression inside single quotes is a Perl substitution regex.
  • folders can be a wildcard (*) or a list of directory names.

Example: Adding a Prefix

To prepend backup_ to every folder in the current directory:

rename 's/^/backup_/' *

Example: Changing Case

Convert all folder names to lowercase:

rename 'y/A-Z/a-z/' *

Example: Replacing Spaces with Underscores

rename 'y/ /_/' *

Safety First: Dry Run

Before applying changes, you can see what would happen with the -n (no‑action) flag:

rename -n 's/old/new/' *

This prints the proposed renames without actually modifying anything, letting you verify the pattern.

Renaming Folders via a Graphical File Manager

If you prefer a point‑and‑click approach, most desktop environments provide a built‑in file manager that supports renaming directories.

GNOME Files (Nautilus)

  1. Open Files from the applications menu.
  2. deal with to the folder you wish to rename.
  3. Right‑click the folder and select Rename, or simply press F2 while the folder is highlighted.
  4. Type the new name and press Enter.

KDE Dolphin

  1. Launch Dolphin.
  2. Locate the target directory.
  3. Right‑click → Rename, or press F2.
  4. Edit the name and confirm with Enter.

Xfce Thunar

  1. Open Thunar.
  2. Select the folder.
  3. Choose Edit → Rename or hit F2.
  4. Enter the new name and finish.

Common GUI Tips

  • Ensure you are not inside the folder you are renaming; some managers will refuse to rename the current working directory.
  • If the folder contains open files in applications, close those files first to avoid “device or resource busy” errors.
  • Some managers show a warning if a folder with the same name already exists; heed this to prevent accidental overwrites.

Common Pitfalls and How to Avoid Them

Pitfall Why It Happens Solution
Renaming into an existing directory mv source target moves source inside target when target exists.
Spaces or special characters in names The shell interprets spaces as separators. Check with ls -d target first; use mv -T source target to force a rename (treated as a move, not a copy).
Renaming a mount point Moving a mounted filesystem can break the mount.
Using wildcard incorrectly mv * newname tries to move all items into newname.
Permission denied You lack write permission on the parent directory. Quote the names: mv "old folder" "new folder" or escape spaces with \ . Because of that,

Best Practices for Renaming Folders in Linux

  1. Verify the target name does not already exist – prevents accidental nesting.
  2. Use absolute paths when scripting – eliminates ambiguity about the current working directory.
  3. Prefer mv -T for safety – the -T flag treats the destination as a normal file, ensuring a rename rather than a move‑into.
    mv -T old_folder new_folder
    
  4. Log changes in scripts – add echo "Renamed $old to $new" or use set -x for debugging.
  5. Backup critical data – although renaming is non‑destructive, a quick snapshot (cp -a) can save headaches if a script goes awry.
  6. **make use of tab completion

Below are a few additional techniques that go beyond the basic GUI interface and give you more control over large‑scale renames, especially when you work across many directories at once.


Using Command‑Line Tools

The graphical shortcuts are convenient, but they can become unwieldy when you have dozens of folders to relabel. The classic Unix utilities mv and rename let you rewrite names without opening the file manager each time Worth knowing..

1. Plain mv with explicit syntax

# Move (i.e., rename) a single directory
mv /home/alice/Projects/2024‑Q1 /home/alice/Projects/2025‑Q1

If you prefer to keep the operation reversible, store the original path in a temporary variable:

OLD="/home/alice/Projects/2024‑Q1"
NEW="/home/alice/Projects/2025‑Q1"
mv "$OLD" "$NEW"

2. rename (Perl version)

The Perl rename program is powerful because it can handle patterns, preserve attributes, and works safely even when the target name already exists (it will ask before overwriting).

# Replace all occurrences of “old‑prefix” with “new‑suffix”
rename 's/old-prefix//' /path/to/*old-prefix*

A more solid pattern that also preserves timestamps and permissions is:

rename -N --no-crash 's/old-prefix/\E[space]\E[new-suffix]\E/' /path/to/*

3. Find‑based bulk rename

Once you need to rename every subdirectory under a tree, combine find with mv:

find /home/alice/Projects -mindepth 1 -maxdepth 2 -type d -name "old‑project*" -exec mv -T {}_renamed \; -print

The -T flag tells mv to treat the destination as a regular file, which guarantees a true rename rather than moving something into another directory. For extra safety, wrap the whole pipeline in a set -e block so the script aborts on the first error Small thing, real impact. Simple as that..


Safeguarding Against Accidental Overwrites

Even with careful planning, a typo can create a cascade of problems. A few defensive habits help:

  1. Preview with a dry run – Run the rename command first without actually executing it. With mv you can inspect what would happen by adding --dry-run (if your version supports it) or by echoing the actions:
    mv -n /path/to/old_folder /path/to/new_folder   # -n = no‑overwrite, just prints
    
  2. Create a temporary backup – Copy the entire directory tree to a separate location before you start:
    rsync -avh --delete /home/alice/Projects/ /backup/projects/
    
    This makes it trivial to roll back if something goes wrong.
  3. Check for collisions – Before issuing a batch rename, query the filesystem for any existing entries that match the target name:
    ls -ld /home/alice/Projects/$(basename new_folder)
    
    If the command returns a file/directory, abort and decide whether you really want to overwrite.

Integrating Renaming Into Automation Scripts

Many users rely on bash or Python scripts to orchestrate cleanup tasks. Below is a compact, reusable snippet that combines verification, quoting, and logging:

#!/usr/bin/env bash
# rename_all.sh – safely rename multiple folders based on a pattern

set -euo pipefail

TARGET_PATTERN='^old_'
SOURCE_ROOT='/home/user/Work'

for dir in $(find "$SOURCE_ROOT" -mindepth 1 -type d | grep -E "${TARGET_PATTERN}")./*; do
    NEW_NAME="${dir%.*}new_"          # strip prefix, prepend suffix
    echo "Renaming $dir → $NEW_NAME"
    mv -T "$dir" "$NEW_NAME"
done

echo "All requested renames completed."

Explanation

  • find … -type d enumerates only directories.
  • grep -E "${TARGET_PATTERN}" filters those whose name starts with the chosen prefix.
  • ${dir%.*} removes everything after the last dot, giving a clean stem.
  • The -T flag ensures

To make the renaming process even more solid, consider leveraging the dedicated rename utility (often provided as prename or part of the util-linux package). Unlike mv, rename works purely on filenames and lets you apply Perl‑style regular expressions, which can simplify complex pattern transformations while still giving you full control over safety checks Most people skip this — try not to..

Some disagree here. Fair enough.

Using rename for Bulk Operations

# Dry‑run: show what would change without touching the filesystem
rename -n 's/^old_/new_/' /path/to/*

# Actual rename (only if the dry‑run looks good)
rename 's/^old_/new_/' /path/to/*

Why this helps

Feature mv + loops rename
Handles arbitrary regexes Requires manual substitution in Bash Native Perl regex engine
Built‑in collision detection Must add -n or -i manually -n (no‑overwrite) and -f (force) flags
Works on symlinks safely Needs extra -T or -v checks Treats symlinks as regular names unless -s is used
Easy to pipe into other tools Often requires temporary files Can be combined with find -print0 and xargs -0

When dealing with filenames that contain spaces, newlines, or other special characters, always use null‑delimited streams:

find /home/alice/Projects -type d -name 'old_*' -print0 |
    rename -0 's/^old_/new_/'   # -0 tells rename to expect NUL‑separated input

Logging and Auditing

For production‑grade scripts, it’s valuable to keep an immutable record of every rename operation. Append each action to a log file with timestamps, and optionally store the original and new paths in CSV format for later replay:

LOGFILE="/var/log/folder_rename_$(date +%F_%T).log"
{
    echo "timestamp,original_path,new_path"
    while IFS= read -r -d '' dir; do
        new="${dir/old_/new_}"
        if [[ -e "$new" ]]; then
            echo "$(date +%s),$dir,$new (SKIPPED – target exists)" >>"$LOGFILE"
        else
            mv -T "$dir" "$new"
            echo "$(date +%s),$dir,$new" >>"$LOGFILE"
        fi
    done < <(find "$SOURCE_ROOT" -type d -name 'old_*' -print0)
} >>"$LOGFILE"

The CSV header makes it trivial to import the log into a spreadsheet or a database for auditing or rollback planning.

Rollback Strategy

If you anticipate needing to revert changes, generate a reverse‑rename script alongside the forward operation:

REVERT_SCRIPT="/tmp/revert_renames_$(date +%F_%T).sh"
{
    echo "#!/usr/bin/env bash"
    echo "set -euo pipefail"
    while IFS= read -r -d '' dir; do
        new="${dir/old_/new_}"
        printf 'mv -T %q %q\n' "$new" "$dir"
    done < <(find "$SOURCE_ROOT" -type d -name 'old_*' -print0)
} >"$REVERT_SCRIPT"
chmod +x "$REVERT_SCRIPT"

Should something go wrong, simply run $REVERT_SCRIPT to restore the original names. Because the script records the exact mv -T commands used, it guarantees a precise inverse operation even when filenames contain whitespace or glob characters.

Handling Nested Transformations

Sometimes you need to apply multiple transformations sequentially (e.On the flip side, g. , strip a prefix, replace underscores with hyphens, and lower‑case the result) It's one of those things that adds up. Which is the point..

rename '
    s/^old_//;               # remove prefix
    s/_/-/g;                 # underscores → hyphens
    tr/A-Z/a-z/;             # lowercase
' /path/to/*

Because the code block is evaluated per file, you can also incorporate conditional logic:

rename '
    if (/^old_/) {
        s/^old_/new_/;
        $_ = lc($_);          # lowercase after substitution
    }
' /path/to/*

Conclusion

Renaming directories at scale doesn’t have to be a risky, error‑prone chore. Incorporate these patterns into your automation toolkit, and you’ll turn what could be a source of anxiety into a reliable, repeatable step of your workflow. By combining a few disciplined practices—previewing changes, using null‑delimited streams, leveraging the powerful rename utility, logging every action, and preparing a revert script—you can execute bulk renames with confidence, even in complex, nested directory trees. Happy renaming!

Beyond the Basics: Integrating with Configuration Management

For teams managing fleets of servers or containerized workloads, ad-hoc scripts—no matter how reliable—can drift out of sync with the desired state. Codifying your renaming logic into a configuration management tool (Ansible, SaltStack, Puppet) or a container build step (Dockerfile RUN directives) ensures idempotency and version control That alone is useful..

Ansible Example:

- name: Standardize legacy directory prefixes
  hosts: app_servers
  become: yes
  vars:
    source_root: "/var/lib/app/data"
  tasks:
    - name: Find directories matching old_* pattern
      ansible.builtin.find:
        paths: "{{ source_root }}"
        file_type: directory
        patterns: "old_*"
        recurse: yes
      register: old_dirs

    - name: Rename directories to new_ prefix
      ansible.builtin.command: >
        mv -T "{{ item.path }}" "{{ item.path | regex_replace('^(.*)/old_', '\\1/new_') }}"
      loop: "{{ old_dirs.files }}"
      when: not (item.path | regex_replace('^(.*)/old_', '\\1/new_')) is exists
      changed_when: true
      check_mode: no # mv -T is not idempotent in check_mode without stat checks

This approach provides an audit trail in your playbook runs, integrates with CI/CD pipelines, and allows peer review via pull requests before changes hit production Easy to understand, harder to ignore. Took long enough..

Performance at Scale: Parallelism and xargs

When SOURCE_ROOT contains tens of thousands of directories, a sequential while read loop becomes a bottleneck. GNU parallel or xargs -P can distribute the workload across CPU cores.

find "$SOURCE_ROOT" -type d -name 'old_*' -print0 |
  parallel -0 -j "$(nproc)" --eta '
    new="{/old_/new_}"
    if [[ -e "$new" ]]; then
      echo "$(date +%s),{},$new (SKIPPED)" >> '"$LOGFILE"'
    else
      mv -T "{}" "$new"
      echo "$(date +%s),{},$new" >> '"$LOGFILE"'
    fi
  '
  • -j "$(nproc)" saturates available cores.
  • --eta provides a progress bar and estimated time of arrival.
  • Caution: Parallel mv operations on the same parent directory can contend for inode table locks. If your tree is extremely wide (thousands of siblings in one folder), limit parallelism (-j 4) or group by parent directory first.

Handling Filesystem Boundaries and Mount Points

The mv -T (or rename) command fails silently across filesystem boundaries if you omit the -T flag and the target exists as a directory, or errors out explicitly with mv: cannot move ... across devices. Because of that, if SOURCE_ROOT spans multiple mount points (e. Now, g. , /data, /mnt/backup, /home symlinked elsewhere), you must copy and delete Easy to understand, harder to ignore..

# Detect cross-device scenario
if [[ $(stat -c %d "$dir") -ne $(stat -c %d "$(dirname "$new")") ]]; then
    rsync -aHAX --remove-source-files "$dir/" "$new/" && rmdir "$dir"
    echo "$(date +%s),$dir,$new (CROSS-DEVICE COPY)" >>"$LOGFILE"
else
    mv -T "$dir" "$new"
    echo "$(date +%s),$dir,$new" >>"$LOGFILE"
fi

Using rsync -aHAX preserves hardlinks, ACLs, and extended attributes—critical for application data directories—while --remove-source-files atomically cleans up the source only after verification.

Final Thoughts

You now have a toolkit that spans from a one-liner rename for interactive cleanup to a parallelized, cross-filesystem-aware, configuration-managed pipeline suitable for enterprise change windows. The unifying principle remains the same: never execute a destructive rename without a preview, a log, and a tested rollback path.

Adopt these patterns, commit your wrapper scripts to version control, and treat directory restructuring with the same rigor

Freshly Posted

Out This Morning

Same World Different Angle

From the Same World

Thank you for reading about How To Rename Folder In Linux. We hope the information has been useful. Feel free to contact us if you have any questions. See you next time — don't forget to bookmark!
⌂ Back to Home