Scott Granneman

Contact | Site Map | Search
HomeWritingPresentationsTeachingWeb DevTech InfoUseful LinksPersonal
Home > Tech Info > Linux > Scripts > Space to Underscore

Convert Spaces to Underscores Using a Script

Note: the following script works on Red Hat & Fedora Core; for Debian, you'll need to look at the script at the bottom.

I had several files that had spaces in their names and I wanted to convert those spaces to underscores. Here's how I did it.

If you don't have one already, make a bin directory in your home directory:

$ cd
$ mkdir bin

In your /home/[username]/bin directory, create a new file, called nospace:

$ cd ~/bin
$ pico nospace

In the nospace file, add the following lines (notice that it is *2* spaces after the backslash):

for i in $(ls -1 *)
do
  rename \  _ *.$1
done

Save your changes and close the nospace file. Now we need to make the file executable.

$ chmod 766 nospace

If you do an ls -l, you should now see the following:

-rwxrw-rw- 1 [username] [groupname] [filesize] [date] nospace

Now cd to a directory that has file with spaces in their names and enter the following:

$ nospace txt

Every file ending in .txt should now have underscores instead of spaces in the filename.

If you want to change just the pdf files, enter the following:

$ nospace pdf

If you want to change every single file, regardless of file extension, enter the following at the command line:

$ nospace *

If you wanted to change underscores to spaces, change rename \  _ *.txt in the script to rename _ \  *.txt (Again, notice that there were *2* spaces after the backslash).

For Debian users

for i in $(ls -1 *)
do
  rename 's/\ /_/' *.$1
done