GNU 使用 -print 查找逻辑运算符

GNU 使用 -print 查找逻辑运算符

考虑以下文件布局:

.
├── dir_a
│   └── file_1
└── file_2

调用

find . \( -name dir_a -prune \) -a -print

给出

./dir_a

但援引

find . \( -name dir_a -prune \) -o -print

给出

./file_2

为什么逻辑 OR (-o) 不包括逻辑 AND (-a) 的结果?

答案1

查找规格GNU 查找手册有类似的措辞):

表达式 -o 表达式
初选交替;或运算符。 如果第一个表达式为 true,则不应计算第二个表达式。

  • dir_a

    由于-name匹配 且-prune始终为真,\( -name dir_a -prune \)因此为真,因此 Find 无法到达-printfor dir_a

  • file_1

    Find 不考虑,因为dir_a被剪枝,所以不打印。

  • file_2

    测试-name不匹配,因此\( -name dir_a -prune \)为 false,Find 到达-print初级。

答案2

你的表达实际上是:

(匹配修剪后的 dir_a 但不对其执行任何操作)或(打印其他所有内容)

如果您想打印左侧的任何内容,则需要在括号内包含 -print 。

相关内容