[ILUG] listing files

Colm Buckley colm at tuatha.org
Mon Jul 16 12:28:41 IST 2001


> == kevin lyda
>> == Jerry Walsh

>> You could also just do:
>> ls foo*[^re]c

> no.  unless tcsh implements regexp's *really* weird, that means a
> string beginning with foo, contains any number of chars for a while,
> and then has a char that is neither r or e, and then the last char
> is c.  so the following starred files would be listed in your
> example:

No, no.

Two misconceptions here.

First of all, '*' in a regular expression doesn't mean "any sequence
of characters", it means "zero or more instances of the previous
item", so in a *regular expression* context, "foo*[^re]c" would match
a (sub)string starting with "fo", then any number of "o"s, then any
character except "r" and "e", and finally a "c".

However, shell globbing does *not* use regular expressions; it uses
"glob patterns", which are different (and simpler and less powerful).

It may be possible to use "just" shell globbing to get a list of files
which match "*c" but not "*rec", but it really is easier to use
something like grep here.

*If* it's only files ending in "ec" which you want to exclude, you
could do "*[^e]c", which would give you all files ending in "c" except
those where the second last letter is "e"; this is a bit flaky,
though, as it relies on previous knowledge of the space of filenames.

files=$(ls -1 *c | grep -v 'rec$')

is better.

           Colm

-- 
Colm Buckley @ NewWorld Commerce
Business: +353 1 4334334  / colm at nwcgroup.com / http://www.nwcgroup.com/
Personal: +353 87 2469146 / colm at tuatha.org / http://www.tuatha.org/~colm/
Hard work pays off in the future.  Laziness pays off now.




More information about the ILUG mailing list