带有“-o”和“-exec chown”的“查找”未按预期工作

带有“-o”和“-exec chown”的“查找”未按预期工作

我正在尝试运行以下命令:

find . -user user_name -o -group user_group -exec chown root. {} \;

但运行该命令后,它不会改变任何文件的所有权。如果我在没有 -exec 的情况下运行,它会生成我希望正确修改的所有文件的列表。

如果我使用:

find . -user user_name -exec chown root. {} \; find . -group user_group -exec chown root. {} \;

文件已按预期更新。我在手册页中看到:

expr1 -o expr2
          Or; expr2 is not evaluated if expr1 is true.


expr1 -or expr2
          Same as expr1 -o expr2, but not POSIX compliant.

但是,这些文件的所有者是user_name:user_group.第一种情况应该评估为 true 并运行 exec 命令,除非我在这里误解了某些内容。有人可以解释为什么会这样吗?

如果需要一些系统信息:

find (GNU findutils) 4.4.2 CentOS 版本 6.8(最终版)

答案1

语法中的逻辑运算符的find优先级较低,在您的示例中-o除以-user user_nameand -group user_group -exec chown root. {} \;

检查以下内容:

find . -user user_name -exec chown root. {} \; -o -group user_group -exec chown root. {} \;

为了避免重复,请使用括号来一起计算两个测试表达式:

find . \( -user user_name -o -group user_group \) -exec chown root. {} \;

相关内容