我当前目录下的文件很少,
./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 手册页,但找不到任何解决方案。 网络上的其他来源也没有提供任何令人满意的解释。
一般而言,
A or B
= B or A
,因此当 A = -path './dir1' -prune
且 B = -name "*.txt"
时,这些是等价的:
-path './dir1' -prune
或 -name "*.txt"
-name "*.txt"
或 -path './dir1' -prune
-o
中的和
find
表示“或”。