[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: find -execdir + sed problem



On Thu, 08 Jan 2009 11:24:27 +0100
Sven Joachim <svenjoac@gmx.de> wrote:

> On 2009-01-08 11:03 +0100, Micha Feigin wrote:
> 
> > I'm trying to fix the file suffix on some file in my directories using sed
> > and find but for some reason sed doesn't match the string in this manner,
> > that is running
> > find . -name "*.JPG.jpg" -execdir echo `echo '{}' | sed -e
> > 's/\(.*\).JPG.jpg/\1.jpg/' -` \; on a directory with
> > 2005_10_09-03_05_11.JPG.jpg
> > prints
> > 2005_10_09-03_05_11.JPG.jpg
> > instead of
> > 2005_10_09-03_05_11.jpg
> >
> > any idea what I'm doing wrong?
> 
> The shell does the process substitution before find even sees it:
> `echo '{}' | sed -e 's/\(.*\).JPG.jpg/\1.jpg/' -` is substituted by its
> output, which is "{}", so you are effectively running
> 
> find . -name "*.JPG.jpg" -execdir echo {} \;
> 
> which is not what you intended.
> 
> > find . -type f -exec echo `echo '{}' | tr "[:upper:]" "[:lower:]"` \;
> >
> > also fails to convert the file to lower case for some reason (same problem,
> > doesn't change the case, as if it doesn't see the characters).
> 
> It does indeed not see them, it only sees {}.
> 

doing 
find . -type f -exec echo '{}' | tr "[:upper:]" "[:lower:]" \;
gives the expected output
on the other hand
find . -type f -exec echo `echo '{}' | tr "[:upper:]" "[:lower:]"` \;
doesn't so trying to execute the command and output it to echo fails. Seems
like I'm not clear on the substitution rules in this case


> Sven
> 
> 


Reply to: