I had a bunch of files I needed to upload to a web server. The filenames contained spaces and we know some web browsers don’t like spaces. There was this script I found on the web. It worked out really well.
#!/bin/bash
ls > /tmp/list
# we have to make the list file in a separate
# directory so that it doesn’t get included
# in the list of the current directory!
mv /tmp/list ./list
cat list | tr ‘ ‘ ‘_’ > listnew
# this turns spaces into underscores
FILE_COUNT=$(wc -l list | awk ‘{print $1}’)
LOOP=1
while [ “$LOOP” -le “$FILE_COUNT” ]
do
AWKFEED=”FNR==”$LOOP
# the command to feed awk
# output will be ‘FNR==1’, ‘FNR==2’, ..
OLDFILE=$(awk $AWKFEED list)
NEWFILE=$(awk $AWKFEED listnew)
mv “$OLDFILE” “$NEWFILE”
# keep the quotes to make the shell read file
# names with spaces as one file
LOOP=$(($LOOP+1))
donerm list
rm listnewexit 0
To get this to work, create a file in the same directory. Change the mode to make sure the file is executable.
References:
http://www.dba-oracle.com/t_fix_linux_data_file_names_special_characters.htm