编写find命令修改指定用户文件权限时遇目录访问问题求助
解决find命令遍历无权限目录时报错的问题
你的命令核心逻辑没问题,只是find在尝试进入那些当前执行用户没有访问权限的子目录时,会抛出权限不足的报错信息。这里给你几个实用的解决办法:
方法1:直接屏蔽错误输出
最简单快速的方式,就是把find产生的错误信息重定向到/dev/null,让这些报错不再显示在终端里:
ssh ${DEST_SERV} "find ${DEST_LOCATION} -type f -user a_user -exec chmod 644 {} \; 2>/dev/null"
这个方案适合只关注最终权限修改结果、不想被无关报错干扰的场景。
方法2:提前跳过无权限目录
如果想更优雅地处理,让find主动跳过那些没有权限进入的目录,可以结合-prune参数来实现:
ssh ${DEST_SERV} "find ${DEST_LOCATION} -type d ! -perm -u+rwx -prune -o -type f -user a_user -exec chmod 644 {} \;"
简单拆解下逻辑:
-type d ! -perm -u+rwx:匹配当前用户没有读、写、执行权限的目录-prune:告诉find不要深入这些目录继续遍历-o:逻辑或,后面的权限修改操作只对没有被prune的路径生效
这样find根本不会尝试进入无权限子目录,自然也就不会产生权限报错了。
额外小技巧
要是你之后需要排查哪些目录被跳过了,可以把错误输出重定向到日志文件,而不是直接丢弃:
ssh ${DEST_SERV} "find ${DEST_LOCATION} -type f -user a_user -exec chmod 644 {} \; 2>find_perm_errors.log"
内容的提问来源于stack exchange,提问作者James Heathershaw




