Tugger the SLUGger!SLUG Mailing List Archives

[SLUG] Bash Script: Spaces in file names



Greetings

I have started to write a bash script whoise first task is to find out if a file exists.

A typical path for this file would be:

    /home/<username>/Maildir/.My<space>Plans.<space><space><space>125

when I run the script I get a "no such file or directory" but when I run the ls command from the command line it works fine.

The script is below. When I run it I see this:

[root@sydsrv56 bin]# sh email_sp 125
After padding SP = ' 125'
TGT=/home/*/Maildir/.My\ Plans.\ \ \ 125
ls: /home/*/Maildir/.My\ Plans.\ \ \ 125: No such file or directory

But when I run the same thing from the command line thus:

[root@sydsrv56 bin]# ls -ld /home/*/Maildir/.My\ Plans.\ \ \ 125
lrwxrwxrwx 1 davidt davidt 27 Apr 17 2010 /home/davidt/Maildir/.My Plans. 125 -> /home/plans/Maildir/. 125

Would someone like to stop me from pulling my hair out?

TIA

Nigel.


#       Usage: email_sp Strataplan [User1] [User2]
#
#       Can be used for three purposes.
#
#       1. Only a Strata Plan Number is supplied.
# In this case we look for a symlink in any user's home/Maildir folder
#               and display what we find
#
#       2. For a brand new plan (Only one user supplied):
# Creates a symlink to the manager's Maildir folders under "My Plans"
#
#       3. For a transfer from one manager to another (Two users supplied)
# In this case it needs to copy the symbolic link from one user's Maildir to # another, chown the symlink (-h), remove from the first user's subscriptions
#               and insert into the subscriptions file of the recipient.
#

function usage(){
   echo "Usage: $0 spno [user1] [user2]"
   exit 1
}


function display_sp(){

   PTH="/home/*/Maildir/.My Plans."
   TGT=${PTH}$SP
   TGT=${TGT// /\\ }
   DEBUG echo "TGT="$TGT
   ls -ld "$TGT"
   return
}

function new_sp() {
   return
}

function transfer_sp(){
   return
}

function DEBUG()
{
 [ "$_DEBUG" == "on" ] &&  $@
 }

_DEBUG="on"

# Did we get the correct number of arguments?

[[ $# -eq 0 || $# -gt 3 ]] && usage

SP=`printf "%6s" "$1"` # pad the input strata plan to 6 characters with spaces so "125" becomes " 125"

DEBUG echo "After padding SP = '$SP'"

if [ $# -eq 1 ]
then
   display_sp
elif [ $# -eq 2 ]
then
   FR=$2
   new_sp
elif [ $# -eq 3 ]
then
   TO=$3
   transfer_sp
fi