Chris F.A. Johnson wrote:
> On Fri, 30 Mar 2007, Matthew Flaschen wrote:
>
>> Chris F.A. Johnson wrote:
>>> The basename command is executed and the result is placed on the
>>> command line. What you are running is:
>>>
>>> find -name "*.c" -exec echo {} \;
>>
>> Thank you. I should have figured that out.
>>
>>> Why don't you want to use a script? That's the logical way to do it.
>>
>> If I made a full-out script myself, I'll have to remake it everywhere I
>> go.
>
> Why? Write one script that works everywhere.
I'll still have to copy it everywhere, since it isn't standard.
>> However, I figured out how to work 'rename' (man rename), which is
>> apparently a simple Perl script designed for this.
>
> There are at least two different versions of rename. They use
> different syntax, so what you use in one place might not work in
> another.
Yes. I know both of them now. If neither work, I'll fall back on the
one-liner.
>> Everywhere else, I'll use:
>>
>> for f in $(ls *.cpp); do mv $f $(basename $f .cpp).c ; done
>>
>> Not too hard.
>
> But wrong. It will fail if any filenames contain spaces or other
> pathological characters, partly because of the unnecessary ls, and
> because you didn't quote the variables. It's probably not an issue
> in this case, but it could bite you when you use the same script
> in slightly different circumstances.
>
> Also, you don't need basename; it's an external command (i.e.,
> slow) which the shell replaces with built-in parameter expansion.
>
> for f in *.cpp
> do
> mv "$f" "${f%.cpp}.c"
> done
>
Thanks. That '%' syntax will take getting used to, though.
Matt Flaschen
_______________________________________________
gNewSense-users mailing list
[email protected]
http://lists.nongnu.org/mailman/listinfo/gnewsense-users