如何将find找到的权限被拒文件/文件夹通过管道执行sudo chmod o+rw?
解决方法:将权限被拒的路径传递给sudo chmod
要把你现有的命令和sudo chmod o+rw结合起来,核心是把sed提取出的路径作为参数传给chmod。这里推荐两种可靠的实现方式,分别适配不同场景:
方式1:逐路径处理(适配含空格/特殊字符的路径)
find . 2>&1 | sed -n 's/^[^:]*: .\(.*\): Permission denied/\1/p' | xargs -I {} sudo chmod o+rw {}
各部分说明:
sed -n:加上-n参数后,sed只会输出我们匹配提取的路径,避免打印多余的无意义行。xargs -I {}:把管道传过来的每一行路径替换为{},逐个执行sudo chmod命令,确保路径里的空格、特殊字符不会被错误拆分。
方式2:批量处理(效率更高,推荐)
如果你的路径没有特殊字符,或者想一次性处理所有目标文件,这种方式更高效:
find . 2>&1 | sed -n 's/^[^:]*: .\(.*\): Permission denied/\1/p' | tr '\n' '\0' | xargs -0 sudo chmod o+rw
各部分说明:
tr '\n' '\0':把换行符转换成null字符,避免xargs把路径里的空格误判为分隔符。xargs -0:以null字符作为输入分隔符,完美兼容含空格、特殊字符的路径,同时一次性把所有路径传给chmod,减少命令执行次数。
注意事项
- 确保你的用户账号拥有
sudo权限,执行时可能需要输入密码验证。 o+rw是给所有其他用户添加读写权限,如果你需要更严格的权限控制,可以调整为g+rw(给同组用户)或其他权限组合。- 如果父目录本身没有访问权限,即使修改了子文件的权限,后续操作仍可能报错,这种情况需要先处理父目录的权限。
内容的提问来源于stack exchange,提问作者caot
相关产品推荐
相关产品推荐

