Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
Re: glob qualifier on intermediate directory / no symbolic links
- X-seq: zsh-users 24038
- From: Pier Paolo Grassi <pierpaolog@xxxxxxxxx>
- To: Zsh-Users List <zsh-users@xxxxxxx>
- Subject: Re: glob qualifier on intermediate directory / no symbolic links
- Date: Wed, 10 Jul 2019 15:58:05 +0200
- Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to; bh=QRTPEzIGH8zC8SmTzvEYlWgcnA6Za5wx7+brT1lbSIY=; b=aQN413hRRc7EpyON7bSyWIPNwBxItxSjd5TQc5EJolMLU0HQi7BR4xxfqTroxQUZXP tLyFgWOpS+u8RQTgVHw3ufzFkZxsbv8mXIaEF2ie6eRkW6uWJWWkuGFrrmZeV0eAUH0T Pbw0cB6Swks5NKE2E8twQncRE3y2H94GWlRfRdNCyc/9lZljS/EDIePvcQ6FodNYUbqN M5wj0dvIsEVZ2uaVhJyoNjKz1Yj8Kzboxx5ZfM3fC3rW30SoRej4oT/xiIRu+rc7sNDh aRu4b4gIj6dROCUeSteZyTz9+0LRxwIt6UEpTl4wctzoSpZIkpWD20WkNynBoTcEP4By N0FQ==
- In-reply-to: <20190710133731.GA13596@cventin.lip.ens-lyon.fr>
- List-help: <mailto:zsh-users-help@zsh.org>
- List-id: Zsh Users List <zsh-users.zsh.org>
- List-post: <mailto:zsh-users@zsh.org>
- List-unsubscribe: <mailto:zsh-users-unsubscribe@zsh.org>
- Mailing-list: contact zsh-users-help@xxxxxxx; run by ezmlm
- References: <20190710133731.GA13596@cventin.lip.ens-lyon.fr>
you can do something like this:
setopt NULL_GLOB
typeset -a arr=(*(^@))
ls ${^arr}/file
but I'm curious if there is any solution that doesn't require using an
intermediate array
Pier Paolo Grassi
linkedin: https://www.linkedin.com/in/pier-paolo-grassi-19300217
founder: https://www.meetup.com/it-IT/Machine-Learning-TO
Il giorno mer 10 lug 2019 alle ore 15:38 Vincent Lefevre <vincent@xxxxxxxxxx>
ha scritto:
> Is there a way to use a glob qualifier on an intermediate directory?
> At least, avoid symbolic links from being followed.
>
> For instance, with:
>
> % mkdir -p dir/dir2
> % ln -s dir foo
> % touch {dir,dir/dir2}/file
>
> With recursive globbing, one can choose whether or not to follow
> symbolic links:
>
> % echo **/file
> dir/dir2/file dir/file
>
> % echo ***/file
> dir/dir2/file dir/file foo/dir2/file foo/file
>
> Without recursive globbing, * matches symbolic links:
>
> % echo */file
> dir/file foo/file
>
> But what if I don't want to match symbolic links?
>
> At the end of a pattern, (^@) can be used:
>
> % echo *
> dir foo
>
> % echo *(^@)
> dir
>
> but not inside a pattern:
>
> % echo *(^@)/file
> zsh: no matches found: *(^@)/file
>
> With EXTENDED_GLOB, I get both, like */file, because (...) is used
> here for grouping, not for a glob qualifier.
>
> % setopt EXTENDED_GLOB
> % echo *(^@)/file
> dir/file foo/file
>
> I would have expected the following to work, but doesn't.
>
> % echo (*(^@))/file
> dir/file foo/file
>
> The zshexpn(1) man page says:
>
> Glob Qualifiers
> Patterns used for filename generation may end in a list of
> qualifiers enclosed in parentheses. [...]
>
> What "patterns" means here is not clear. Above, one has
>
> (...) Matches the enclosed pattern. [...]
> ^^^^^^^
>
> but it seems that this is not a pattern that can have a glob qualifier.
> I assume that except for the grouping exception and recursive globbing,
> this is because patterns are mainly string operations until the list of
> files before considering glob qualifiers is obtained.
>
> I'm wondering why the following is not accepted:
>
> % echo (*/)file
> zsh: bad pattern: (*/)file
>
> I think that (pat/) without a following # should match a single
> occurrence of pat/ (without following symbolic links, contrary
> to the case without parentheses).
>
> --
> Vincent Lefèvre <vincent@xxxxxxxxxx> - Web: <https://www.vinc17.net/>
> 100% accessible validated (X)HTML - Blog: <https://www.vinc17.net/blog/>
> Work: CR INRIA - computer arithmetic / AriC project (LIP, ENS-Lyon)
>
Messages sorted by:
Reverse Date,
Date,
Thread,
Author