`find` 在修剪目录时表现不直观

问题描述 投票:0回答:1

我当前目录下的文件很少,

./a.txt
./b.txt
./dir1/c.txt
./dir1/d.txt

当我执行

find . -path './dir1' -prune -o -name "*.txt"
时,

正如预期的那样,它排除了“dir1”下的所有内容并打印,

./a.txt
./b.txt
./dir1

现在如果我切换子表达式的顺序并执行

find . -name "*.txt" -o -path './dir1' -prune
, 据我了解,它应该显示所有文件,因为
 -name "*.txt"
子表达式应该匹配具有 .txt 扩展名的所有文件,并且只需通过以下测试将
or
匹配即可。因此,不应排除“dir1”目录内容。但事实似乎并非如此。显示的结果与上一个相同。

./a.txt
./b.txt
./dir1

我在这里缺少什么?

我的系统是ubuntu-20.04。我浏览了 find 手册页,但找不到任何解决方案。 网络上的其他来源也没有提供任何令人满意的解释。

shell unix find command-line-interface
1个回答
0
投票

一般而言,

A or B
=
B or A
,因此当 A =
-path './dir1' -prune
且 B =
-name "*.txt"
时,这些是等价的:

  1. -path './dir1' -prune
    -name "*.txt"
  2. -name "*.txt"
    -path './dir1' -prune

-o

中的
find
表示“或”。

© www.soinside.com 2019 - 2024. All rights reserved.