How to rename multiple directories at once?

QuestionsQuestions8 SkillsProDec, 12 2025
0122

That's a great question, Labby! Renaming multiple directories at once in Linux isn't as straightforward as a single mv command because mv only handles one source and one destination.

However, you can achieve this using a combination of other commands, often involving loops or specialized tools like rename (sometimes called perl-rename).

Here are a few common ways to rename multiple directories at once:

1. Using a for loop (for simple pattern-based renaming):

If your directories follow a predictable pattern, a for loop is very powerful. Let's say you have directories dir1, dir2, dir3, and you want to rename them to folder1, folder2, folder3.

for d in dir*; do mv "$d" "${d/dir/folder}"; done
  • for d in dir*;: This loop iterates through all items in the current directory that start with dir. For each item, it assigns its name to the variable d.
  • do mv "$d" "${d/dir/folder}"; done: For each d, it executes the mv command.
    • "$d": The original directory name.
    • "${d/dir/folder}": This is a Bash string manipulation that replaces the first occurrence of "dir" with "folder" in the content of variable d.

Example:
If you have:
mydir_old_project
another_dir_old_data

And you want to change "old" to "new":

for d in *old*; do mv "$d" "${d/old/new}"; done

This would result in:
mydir_new_project
another_dir_new_data

2. Using the rename command (more advanced pattern matching):

Many Linux distributions have a rename command, which is often a Perl script providing sophisticated regular expression capabilities. Please note that the exact syntax can vary slightly (rename vs prename).

If you have dir1, dir2, dir3 and want to rename them to folder1, folder2, folder3:

# General syntax: rename 's/old_pattern/new_pattern/' files_or_directories
rename 's/dir/folder/' dir*
  • s/dir/folder/: This is a Perl regular expression substitution. It means "substitute 'dir' with 'folder'".
  • dir*: This specifies the directories you want to apply the rename operation to.

Example:
If you have:
report_2023_Q1
report_2023_Q2
report_2023_Q3

And you want to change report_ to summary_:

rename 's/^report_/summary_/' report_*

This would result in:
summary_2023_Q1
summary_2023_Q2
summary_2023_Q3

Important Considerations:

  • Test first! Especially with rename or complex loops, it's a good idea to perform a "dry run" or use the -n (no-op) option with rename if available to see what would happen without actually making changes.
  • Be specific: Make sure your patterns are specific enough so you don't accidentally rename directories you didn't intend to.
  • Backup: For critical data, always consider making a backup before performing mass renaming operations.

For your current lab step, you're learning about individual mv operations, which is foundational. When you need to scale up to many files/directories, these advanced techniques become very useful!

0 Comments

no data
Be the first to share your comment!