FAQ Search Today's Posts Mark Forums Read
» Video Reviews

» Linux Archive

Linux-archive is a website aiming to archive linux email lists and to make them easily accessible for linux users/developers.


» Sponsor

» Partners

» Sponsor

Go Back   Linux Archive > Redhat > Fedora User

 
 
LinkBack Thread Tools
 
Old 08-16-2012, 12:11 AM
fred smith
 
Default stupid bash question

On Wed, Aug 15, 2012 at 05:19:22PM -0600, Larry Martell wrote:
> On Wed, Aug 15, 2012 at 5:08 PM, Craig White <craig.white@ttiltd.com> wrote:
> > Some really good suggestions but unfortunately no dice
> >
> > On Aug 15, 2012, at 3:22 PM, Larry Martell wrote:
> >
> >> Run the script with -x to see what's happening. $NAME is probably
> >> getting expanded. You might have to set noglob.
> > ----
> > set +o noglob (inside or outside script made no difference
>
> This worked for me:
>
> $ cat t.sh
> set -o noglob
> NAME="*.mov"
> find . -maxdepth 1 -name $NAME -print
>
> $ touch t.mov t2.mov
> $ bash t.sh
> ./t.mov
> ./t2.mov


how about something (seemingly simple) like this:

find out how many there are:

count=`ls * | grep -c .MOV$`

then diagnose the result:

if [ $count -ge 1 ]
then
do your stuff here
else
echo oops. nothing to do!
fi

of course, there are pitfalls... we're asuming that there are only FILES
that would match the pattern ".MOV", no directories.

--
---- Fred Smith -- fredex@fcshome.stoneham.ma.us -----------------------------
The Lord detests the way of the wicked
but he loves those who pursue righteousness.
----------------------------- Proverbs 15:9 (niv) -----------------------------
_______________________________________________
CentOS mailing list
CentOS@centos.org
http://lists.centos.org/mailman/listinfo/centos
 
Old 08-16-2012, 01:13 AM
Mark LaPierre
 
Default stupid bash question

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
****
_______________________________________________
CentOS mailing list
CentOS@centos.org
http://lists.centos.org/mailman/listinfo/centos
 
Old 08-16-2012, 04:48 PM
Craig White
 
Default stupid bash question

On Aug 15, 2012, at 5:11 PM, fred smith wrote:

> how about something (seemingly simple) like this:
>
> find out how many there are:
>
> count=`ls * | grep -c .MOV$`
>
> then diagnose the result:
>
> if [ $count -ge 1 ]
> then
> do your stuff here
> else
> echo oops. nothing to do!
> fi
>
> of course, there are pitfalls... we're asuming that there are only FILES
> that would match the pattern ".MOV", no directories.
----
very effective for my purposes, thanks.

Craig
_______________________________________________
CentOS mailing list
CentOS@centos.org
http://lists.centos.org/mailman/listinfo/centos
 
Old 08-16-2012, 10:14 PM
Kahlil Hodgson
 
Default stupid bash question

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

_______________________________________________
CentOS mailing list
CentOS@centos.org
http://lists.centos.org/mailman/listinfo/centos
 
Old 08-17-2012, 12:00 AM
Craig White
 
Default stupid bash question

On Aug 16, 2012, at 3:14 PM, Kahlil Hodgson wrote:

> 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,
----
sort of but the other suggestion was more than sufficient for my purposes.

Interesting that I could have the variable in double quotes inside the double quoted braces and it still worked. I would have never actually tried it.

Thanks

Craig
_______________________________________________
CentOS mailing list
CentOS@centos.org
http://lists.centos.org/mailman/listinfo/centos
 

Thread Tools




All times are GMT. The time now is 01:35 AM.

VBulletin, Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.
Content Relevant URLs by vBSEO ©2007, Crawlability, Inc.
Copyright 2007 - 2008, www.linux-archive.org