the relevant snippet is... NAME="*.mov" cd $IN if test -n "$(find . -maxdepth 1 -name $NAME -print -quit)" and if there is one file in this directory - ie test.mov, this works fine but if there are two (or more) files in this directory - test.mov, test2.mov then I get an error... find: paths must precede expression So my code is evidently wrong. I just want a test for 1 or more files ending in .mov in the directory? Any one want to toss me a bone here? -- Craig White ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ craig.white at ttiltd.com 1.800.869.6908 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ www.ttiassessments.com Need help communicating between generations at work to achieve your desired success? Let us help!
On Wed, Aug 15, 2012 at 4:19 PM, Craig White <craig.white at ttiltd.com> wrote:> the relevant snippet is... > > NAME="*.mov" > cd $IN > if test -n "$(find . -maxdepth 1 -name $NAME -print -quit)" > > and if there is one file in this directory - ie test.mov, this works fine > > but if there are two (or more) files in this directory - test.mov, test2.mov > > then I get an error... > find: paths must precede expression > > So my code is evidently wrong. I just want a test for 1 or more files ending in .mov in the directory? > > Any one want to toss me a bone here?Run the script with -x to see what's happening. $NAME is probably getting expanded. You might have to set noglob.
On Wed, 15 Aug 2012, Craig White wrote:> the relevant snippet is... > > NAME="*.mov" > cd $IN > if test -n "$(find . -maxdepth 1 -name $NAME -print -quit)" > > and if there is one file in this directory - ie test.mov, this works fine > > but if there are two (or more) files in this directory - test.mov, test2.mov > > then I get an error... > find: paths must precede expressionThe substitution of $NAME is expanding the wild card, giving you a single -name with two arguments. You probably want something like: NAME="\*.mov" Steve
Put escaped double quotes around name, like \"$NAME\" in the test expression. -- Pat Welch Sent from my Android phone with K-9 Mail. Craig White <craig.white at ttiltd.com> wrote: the relevant snippet is... NAME="*.mov" cd $IN if test -n "$(find . -maxdepth 1 -name $NAME -print -quit)" and if there is one file in this directory - ie test.mov, this works fine but if there are two (or more) files in this directory - test.mov, test2.mov then I get an error... find: paths must precede expression So my code is evidently wrong. I just want a test for 1 or more files ending in .mov in the directory? Any one want to toss me a bone here? -- Craig White ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ craig.white at ttiltd.com 1.800.869.6908 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ www.ttiassessments.com Need help communicating between generations at work to achieve your desired success? Let us help! _____________________________________________ CentOS mailing list CentOS at centos.org http://lists.centos.org/mailman/listinfo/centos
On 08/15/2012 06:19 PM, Craig White wrote:> the relevant snippet is... > > NAME="*.mov" > cd $IN > if test -n "$(find . -maxdepth 1 -name $NAME -print -quit)" > > and if there is one file in this directory - ie test.mov, this works fine > > but if there are two (or more) files in this directory - test.mov, test2.mov > > then I get an error... > find: paths must precede expression > > So my code is evidently wrong. I just want a test for 1 or more files ending in .mov in the directory? > > Any one want to toss me a bone here? >Are you trying to find out if there are one or more files that match, or are you trying to list the name(s) of the files? NAME=`ls *.mov` for FILE in $NAME do echo "$FILE" done -- _ ?v? /(_)\ ^ ^ Mark LaPierre Registerd Linux user No #267004 www.counter.li.org ****
On 16/08/12 08:19, Craig White wrote:> the relevant snippet is... > > NAME="*.mov" cd $IN if test -n "$(find . -maxdepth 1 -name $NAME > -print -quit)" >The problem is the outermost double quotes in the "$(...)" expression and figuring out how to pass the appropriate quotes into the subshell created by the $(). One trick is to let the outer shell do the interpolation first. The following script may be informative: =========================================#!/bin/bash NAME="*.mov" echo $NAME echo "$NAME" echo $(echo $NAME) echo $(echo "$NAME") echo $(echo \"$NAME\") echo $(echo '$NAME') echo "$(echo $NAME)" echo "$(echo "$NAME")" echo "$(echo \"$NAME\")" echo "$(echo '$NAME')" if test -n "$(find . -name "$NAME")" then echo FOUND IT fi ========================================= Hope this helps, Kal -- Kahlil (Kal) Hodgson GPG: C9A02289 Head of Technology (m) +61 (0) 4 2573 0382 DealMax Pty Ltd (w) +61 (0) 3 9008 5281 Suite 1415 401 Docklands Drive Docklands VIC 3008 Australia "All parts should go together without forcing. You must remember that the parts you are reassembling were disassembled by you. Therefore, if you can't get them together again, there must be a reason. By all means, do not use a hammer." -- IBM maintenance manual, 1925