On Tue, Sep 12, 2023 at 10:15 AM <[email protected]> wrote:
>
> Let's assume the following current folder:
>
> .
> |
> +---- a.txt
> |
> +---- b.txt
> |
> +---- c.txt
>
> in which we issue the following command
>
> $ find . -depth -name a.txt -o -name b.txt
>
> We get the following result:
>
> ./a.txt
> ./b.txt
>
>
> -------- Problem 1 --------
>
> By evaluating the expression according to the information in the manual of
> find
> the command should return also c.txt as part of the result. Let me explain my
> reasoning. The above command is equivalent to the following command:
>
> $ find . -depth -a -name a.txt -o -name b.txt
>
> and the expression is evaluated for each file, that is even for c.txt and
> because
> the result is known immediately after the evaluation of -depth (which always
> returns
> true) the command should print it to the standard output.
>
> Not having c.txt in the result it seems to me that find performs the following
> evaluation:
>
> $ find . -depth -a \( -name a.txt -o -name b.txt \)
>
> Is this correct? If so, then some information in the manual page should
> clarify
> that all global options are (probably) evaluated only once and before the
> rest of
> the expression.
No, that's not correct. The behaviour is like
$ find . \( -depth -a -name a.txt \) -o -name b.txt
-depth is always true, but "true and something else" is the same as
"something else" so it still has to check -name a.txt.
--
Tavian Barnes