- To: Nigel Allen <dna@xxxxxxxxxxx>
- Subject: Re: [SLUG] Bash Script: Spaces in file names
- From: Chris Donovan <alienresidents@xxxxxxxxx>
- Date: Thu, 14 Jul 2011 08:01:38 +1000
- Cc: Slug <slug@xxxxxxxxxxx>
- Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type:content-transfer-encoding; bh=kEdZxpTQpNGMawDPHY1Q5gO/rNvRmuh2O5h/BINNLJs=; b=ZqVUS6ME0ugU6VQpLdYVIqKeXTwr8ESC++LGrFqMTVNYGor6KtqmHA1aETZRIW9/g7 DRaGjGKDGwotlldFnL4FnBDcSxD8KiCD0xgO7N5KGo+XTkn2MzGoDWvneMxNyDtcDXUk qSMs/MuINLgIJlRUfbHmHE+WtdCnztG1b0Z8s=
Hi Nigel,
You shouldn't be quoting the escaped string. Due to the fact that
you're quoting the $TGT, you don't need the second TGT declaration
using the builtin bash regex. So, either don't quote, or don't escape
the spaces...
Chris-
On Thu, Jul 14, 2011 at 7:15 AM, Nigel Allen <dna@xxxxxxxxxxx> wrote:
>
> 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
>
> --
> SLUG - Sydney Linux User's Group Mailing List - http://slug.org.au/
> Subscription info and FAQs: http://slug.org.au/faq/mailinglists.html
>