我正在尝试运行以下命令:
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_name
and -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. {} \;