[vox-tech] Bash scripting newbie - need syntax help

Larry Ozeran vox-tech@lists.lugod.org
Fri, 30 Apr 2004 00:46:54 -0700


Thanks again Ken. That's the problem with the ignorant, we just don't know=
 the importance of each symbol / character in the answer. I didn't want to=
 use the recommendation as it was because I only wanted to remove the=
 error* files. I (incorrectly) assumed the slash was marking parameters=
 rather than ensuring the * was passed as an uninterpreted character. Now I=
 see why either erro\* or "erro*" would work.

I guess it's time to get educated. Definitely not enough info in the bash=
 man page for me to become effective with it. Does anyone want to suggest a=
 bash tutorial?

- Larry

*********** REPLY SEPARATOR  ***********

On 4/29/04 at 10:00 AM Ken Bloom wrote:

>On Wed, Apr 28, 2004 at 11:57:13PM -0700, Larry Ozeran wrote:
>> Thanks Ken.
>> 
>> I had not seen quotes working from the first find suggestion:
>> Consider another direction:
>> $ find /var/log -iname \*.[0-9].[0-9] -print0 | xargs -r0 rm -f
>
>And you attempted:
>find -iname \erro*.[1-4].[1-4] -print0 | xargs -r0 rm -f
>
>The point of the backslash in these two examples was to supress the
>expansion of the * character by using \* to make the shell pass the *
>on literally.
>
>The command:
>find -iname \erro*.[1-4].[1-4] -print0 | xargs -r0 rm -f
>would need to be rewritten as:
>find -iname erro\*.[1-4].[1-4] -print0 | xargs -r0 rm -f
>
>Replacing a character "c" with "\c" is a common way that computer
>languages change the meaning of a character to/from something special.
>This convention was adopted from C where \n means a newline, \t means
>a tab, and \\ means a literal backslash. Thus, in order for the
>backslash to have the desired effect, it needs to go immediately
>before the *.
>
>> 
>> The quotes are indeed necessary. It worked!
>> 
>> Thanks again to everyone who contributed.
>> 
>> - Larry
>> 
>> *********** REPLY SEPARATOR  ***********
>> 
>> On 4/28/04 at 10:39 PM Ken Bloom wrote:
>> 
>> >You *need* to put the pattern in quotes, because otherwise the shell
>> >will perform wildcard expansion just the same way it was doing for the
>> >rm command. Try 
>> >find -iname 'erro*.[1-4].[1-4]' -print0 | xargs -r0 rm -f
>> >This should stop the nasty expansion.
>> >
>> >This was demonstrated implicitly before, as Foo Lim said:
>> >> >
>> >> >Try using xargs like this:
>> >> >
>> >> >find . -name "error*" | xargs rm
>> >> >
>> >> >You can also try doing it through the find command like this:
>> >> >
>> >> >find . -name "error*" -exec rm \{} \;
>> >
>> >-- 
>> >I usually have a GPG digital signature included as an attachment.
>> >See http://www.gnupg.org/ for info about these digital signatures.
>> >My key was last signed 10/14/2003. If you use GPG *please* see me about=
 
>> >signing the key. ***** My computer can't give you viruses by email. ***
>> >
>> >-----BEGIN PGP SIGNATURE-----
>> >Version: GnuPG v1.2.4 (GNU/Linux)
>> >
>> >iD8DBQFAkJUOlHapveKyytERAlp9AKCjezddTAWH0y9Ips0EGSo597t2twCaApFS
>> >u2frUtwdexqyfvAdzYYQgho=3D
>> >=3Dct7r
>> >-----END PGP SIGNATURE-----
>> >
>> >_______________________________________________
>> >vox-tech mailing list
>> >vox-tech@lists.lugod.org
>> >http://lists.lugod.org/mailman/listinfo/vox-tech
>> 
>> 
>> - Larry
>> 
>> _______________________________________________
>> vox-tech mailing list
>> vox-tech@lists.lugod.org
>
>-- 
>I usually have a GPG digital signature included as an attachment.
>See http://www.gnupg.org/ for info about these digital signatures.
>My key was last signed 10/14/2003. If you use GPG *please* see me about 
>signing the key. ***** My computer can't give you viruses by email. ***
>
>-----BEGIN PGP SIGNATURE-----
>Version: GnuPG v1.2.4 (GNU/Linux)
>
>iD8DBQFAkTStlHapveKyytERAuhdAJwKzS1wO/vJOUq3fnTSzJlqp4lzuACggW+S
>jPt5TrfsPZ68S/mvRgf3sqM=3D
>=3DQMaM
>-----END PGP SIGNATURE-----
>
>_______________________________________________
>vox-tech mailing list
>vox-tech@lists.lugod.org
>http://lists.lugod.org/mailman/listinfo/vox-tech


- Larry