How to Rename a Directory on Linux

Publish date: 2024-06-21

Quick Links

Key Takeaways

Renaming a directory in Linux is easy, and there are plenty of ways to go about it. From renaming a single directory to finding and renaming many, here's how to do it.

Renaming a Folder Won't Harm Your Data

Renaming directories is something we all need to do from time to time.

We might create a directory and misspell its name, and we want to put it right. Often, the purpose of a directory changes over time or through the life of a project, and you want to adjust the name to reflect its new use. Perhaps you've decompressed an archive file and it's created a directory tree with the directory names in uppercase and you'd like them in lowercase.

Whatever the reason, renaming a directory doesn't do anything to the data held inside it. It changes the path to that data, but the files and directories inside your renamed directory aren't touched.

Do not rename system directories. Changing the path to system files and commands is going to have a detrimental effect on the running of your computer, to say the least. If you need to use sudo to rename a directory---unless you really know what you're doing---the chances are you shouldn't be renaming it.

Using the mv Command

In the most straightforward cases, all we really need is the mv command. This is an integral part of every Linux distribution, so there is nothing to install.

The mv command is over 50 years old at the time of writing. It hails from the dawn of Unix, when short and cryptic commands were in vogue, probably to reduce the number of characters that had to pass along slow serial lines from teletypes and dumb terminals to the actual computer.

It actually stands for "move", and it can be used to move files from directory to directory. If you move a file to the same location that it is already in and give it a new name, you've renamed the file. And we can do the same with directories.

There are two subdirectories in this directory.

ls

To rename a directory we use the mv command. We need to provide the current name of the directory and the new name.

mv old-work archive-2

If the directory you want to rename is not in your current directory, provide the path as well as the directory name.

mv ~/htg/old-work ~/htg/archive-2
ls

Using the File Browser

File browsers are able to rename directories. The keystroke in the GNOME Files application is F2. Highlighting a directory and tapping the F2 key opens the "Rename Folder" dialog.

Type in the new name, and click the green "Rename" button.

The directory is renamed for you.

It's as simple as that.

The rename Command

If your needs are more complicated than the straightforward renaming of a directory you might need to use the rename command. This allows you to use Perl expressions to rename files and directories. It provides an altogether more powerful and flexible way to rename directories.

We're going to be talking about the Perl-based rename command. There is another, older command called rename which is part of the Linux core utilities. You'll probably need to install the Perl rename command we want to use.

To avoid name clashes with the existing rename command, the Perl rename command is called prename on Fedora, and perl-rename on Manjaro. On Ubuntu, the rename and prename commands are both symbolic links that resolve to a binary called file-rename.

So, on Manjaro the command you'll need to use perl-rename, and on Fedora it is prename . On Ubuntu, you can use rename or prename.

To install Perl rename, on Ubuntu you need to type:

sudo apt install rename

On Fedora, the command is:

sudo dnf install prename

On Manjaro the package is called perl-rename.

sudo pacman -Sy perl-rename

Make sure you use the appropriate command for your distribution if you want to work through the examples.

First Steps With rename

The rename command takes Perl regular expressions and applies them to a file or directory, or group of files or directories.

In our directory, we have a collection of other directories.

ls

Their names are a mixture of lowercase, uppercase, and mixed case. We can convert them all to lowercase with a suitable expression.

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

All the directories are now in lowercase, whether they were wholly uppercase previously, or contained the odd uppercase letter.

All the magic is contained in the expression. The expression is wrapped in single quotes "'". This is what the entire command means.

In other words, the command reads as "for all directories, swap any uppercase letters for the equivalent lowercase letter."

Obviously, you can rename a single directory with rename, although it does smack of overkill. You'll be quicker using mv.

rename 's/gamma/epsilon-2/' *
ls

The "s" in this expression means substitute. It checks each directory to see if its name is "gamma". If it is, it replaces it with "epsilon-2." Be aware though, that this would also have matched a directory called "gamma-zeta", for example, renaming it to "epsilon-2-zeta."

We can avoid this by adding the start of string "^" and end of string "$" metacharacters to the first clause of the expression.

ls
rename 's/^gamma$/epsilon-2/' *
ls

This leaves the directory "epsilon-2" untouched.

Using rename With Other Commands

We can use other commands to locate the directories we want rename to work on. If we have a set of nested directories and we want to rename any that end in "-old" so they end in "-archive", we can achieve that by using find and xargs.

We need to use xargs because rename doesn't accept piped input. The xargs command overcomes that problem by accepting the piped input and adding to the command line of another command as a command line parameter.

Our command looks like this:

find . -depth -type d -name "*-old" | xargs -r rename "s/old$/archive/"

Our directory tree looks like this before the command.

We run our command:

And we can see that all of the matching directories including the nested ones have been renamed.

Horses for Courses

Renaming a directory doesn't need anything more than mv. If you prefer GUI applications you can use your file browser. If you've got a lot of directories to rename, and especially if they're scattered throughout a directory tree, you're going to need the flexibility of rename.

ncG1vNJzZmivp6x7qbvWraagnZWge6S7zGhvaW9pbn1wvsSnmKadXZm2s7HCraarsV2htq%2FB12g%3D