Bash查找不属于权限的文件/文件夹-执行多个命令

时间:2019-09-09 07:06:23

标签: bash find

我已经关闭了命令,但是似乎没有执行命令。

find /folder \! -user USERNAME -o -not -group GROUPNAME -o -not -perm 750 -exec chown USERNAME:GROUPNAME {} \; -exec chmod 750 {} \;

1 个答案:

答案 0 :(得分:2)

find的手册说(重点是我的):

  

expression -o expression

     

替代原语; OR运算符。 如果第一个表达式为真,则不对第二个表达式求值。

对于您的调用,这意味着,如果当前正在处理的文件不属于用户USERNAME或用户组GROUPNAME,则find将保持原样并跳至下一个,并且如果其权限位与750不匹配,则将运行chownchmod

要使其工作,您需要在表达式周围放置括号以强制其优先级,例如:

find /folder ! \( -user USERNAME -group GROUPNAME -perm 750 \) \
     -exec echo chown USERNAME:GROUPNAME {} \; \
     -exec echo chmod 750 {} \;

如果输出看起来不错,请删除echo

还要注意,chownchmod都可以一次处理多个文件,因此可以用\;替换+并节省时间。