How to replace all filenames with space with underscore using a shell script
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:
#!/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
.
I wrote 21 books to help you become a better developer:
- HTML Handbook
- Next.js Pages Router Handbook
- Alpine.js Handbook
- HTMX Handbook
- TypeScript Handbook
- React Handbook
- SQL Handbook
- Git Cheat Sheet
- Laravel Handbook
- Express Handbook
- Swift Handbook
- Go Handbook
- PHP Handbook
- Python Handbook
- Linux Commands Handbook
- C Handbook
- JavaScript Handbook
- Svelte Handbook
- CSS Handbook
- Node.js Handbook
- Vue Handbook
Also, JOIN MY CODING BOOTCAMP, an amazing cohort course that will be a huge step up in your coding career - covering React, Next.js - next edition February 2025