Re: Filename generation: instruct zsh not to follow symbolic links?

Mikael Magnusson <[email protected]> Thu, 16 Jul 2026 18:04:54 +0200
Newsgroups gmane.comp.shells.zsh.user
Message-ID <CAHYJk3RjJOFvd9KYsjBgYPbkOsyo4BG30Jsy9uQ2U_-v-3h0UQ@mail.gmail.com>
On Thu, Jul 16, 2026 at 11:35=E2=80=AFAM Vincent Lefevre <[email protected]=
t> wrote:
>
> On 2026-07-16 02:57:46 +0200, Mikael Magnusson wrote:
> > On Thu, Jul 16, 2026 at 1:47=E2=80=AFAM Vincent Lefevre <vincent@vinc17=
.net> wrote:
> > >
> > > In filename generation, is there a way to instruct zsh not to follow
> > > symbolic links?
> > >
> > > Unfortunately, it is not possible to use glob qualifiers on
> > > pathname components (except the last one, i.e. ending the pattern),
> > > e.g. *(/)/foo, even though there would be no ambiguity in parsing
> > > (because a slash cannot appear in a pathname component).
> >
> > No, but you can do things like
> > () { mycmd $^@/foo } *(/)
> > which conveniently doesn't need any named temporary parameters.
>
> I get "No such file or directory" errors for some directories.
> But this is too complex anyway, and perhaps not usable in some
> situations.

Right, you might need
() { setopt localoptions cshnullglob; mycmd $^@/foo } *(/)
:)

> > fwiw, this is perfectly valid:
> > bing/(bar/)#foo
> > so the parsing might be less easy than you think. (Unless you were
> > thinking about looking for the )/ sequence? Maybe that would work, but
> > who can say for sure). I'm not exactly sure what you mean by "because
> > a slash cannot appear in a pathname component", are you referring to
> > the / inside the (/) or the one after? Because obviously all other
> > glob qualifiers are not the '/' character.
>
> I would rather think that a (/ sequence could have a special meaning.
> That should be easy to parse.

Sure, but that'd be an extreme special case then. You wouldn't be able
to use any other glob qualifiers there.

--=20
Mikael Magnusson