# Replace spaces with underscores in filenames (shell script)

> Learn how to recursively replace spaces with underscores in every filename in a folder, with a small Fish shell script that combines find, tr, and mv.

Author: [Flavio Copes](https://flaviocopes.com/about/) | Published: 2022-12-12 | Topics: [CLI](https://flaviocopes.com/tags/cli/) | Canonical: https://flaviocopes.com/how-to-replace-filenames-spaces-underscores/

I had to replace all filenames in a folder, recursively, with space with underscore.

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:

```bash
#!/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`.
