How to un-select files in shell wildcard patterns

Polytropon freebsd at edvax.de
Fri Jun 21 23:40:41 UTC 2019


On Fri, 21 Jun 2019 10:44:56 -0500, Paul Schmehl wrote:
> --On June 21, 2019 at 5:49:09 AM +0200 Polytropon <freebsd at edvax.de> wrote:
> 
> > I'm interested in a convenient method to "un-select" files
> > when using regular (sh) shell wildcards. It's quite easy to
> > describe things like
> >
> > 	*.tex
> >
> > to perform an operation on all LaTeX source files, or
> >
> > 	*a*
> >
> > on all files whose name contains (at least) one "a". Patterns
> > that are based on the inclusion of certain attributes are not
> > a problem to deal with using the builtin pattern matching of
> > the shell.
> >
> > But what about the opposite? Let's say, perform an operation
> > on all files _except_ the LaTeX source files, or all files
> > whose name does _not_ contain an "a"?
> >
> > Is there a good method to do this, except creating a kind
> > of "custom regex wrapper script" that does the selection part,
> > for further use with `subshell` or | xargs?
> 
> I feel almost silly trying to suggest anything to *you*, but egrep 
> '(foo|bar|zed|fam). does the trick. So, for example, if you want to do 
> something in the shell to act on all files except ones that end in .tex or 
> have an a in their name:
> ls -al| egrep '(a|\.tex)' * | awk (whatever), etc.

This is exactly what I an trying to avoid, i. e., not depend on
external programs, but instead use what the shell offers interally.

Of course, even regular grep can be used:

	ls | grep -v "a" | xargs ... foo ...

or

	foo `ls | grep -v "a"` ...

could implement the "_not_ this pattern" mechanism (just as the
use of "awk '!/a/" with the ls output, to generate a list of the
matching files (here: those that do _not_ match a certain pattern).

So, is it correct that there is no shell builtin mechanism for
this kind of "negative selection"?




-- 
Polytropon
Magdeburg, Germany
Happy FreeBSD user since 4.0
Andra moi ennepe, Mousa, ...


More information about the freebsd-questions mailing list