AI Workshop: learn to build apps with AI →
Shell Scripting: How to replace spaces in filenames with underscores using a shell script

Join the AI Workshop and learn to build real-world apps with AI. A hands-on, practical program to level up your skills.


I had to replace all spaces in filenames in a folder (recursively) with underscores.

This is one of the one-off operations I need to do while working on my website, and I don’t really want to, for example, search, install (buy) an app just to do that.

Here’s the Fish Shell script I used:

#!/opt/homebrew/bin/fish

# define the directory to search
set search_dir ./

# recursively find all files in the search directory
find $search_dir -type f | while read -l file
    # replace spaces with underscores in the file name
    set new_name (echo $file | tr ' ' '_')

    # rename the file
    mv $file $new_name
end

I put this in the folder containing all the files and folders I wanted to rename, named replace_spaces.fish.

Then I set it as executable using chmod +x replace_spaces.fish and finally ran it using ./replace_spaces.fish.

Lessons in this unit:

0: Introduction
1: Introduction to Shells
2: Bash Basics
3: Writing Shell Scripts
4: Variables and Environment Variables
5: Loops and Arrays
6: Shell Script Functions
7: Creating Aliases
8: Tips and Tricks
9: The Fish Shell
10: Persist aliases and other configuration in Fish Shell
11: How to add a path to Fish Shell
12: Fish Shell, how to avoid recording commands to history
13: Fish Shell, how to remove the welcome message
14: ▶︎ How to replace spaces in filenames with underscores using a shell script
15: How to update all npm packages in multiple projects that sit in subfolders