如何使用chown -R命令递归修改权限时排除指定子目录?
如何递归修改目录权限时排除指定子目录
嗨,这个问题我碰到过好多次了——很遗憾,chown本身并没有内置的exclude参数,你写的那种chown -R admin exclude=/home/admin/web/public_html/content /home/admin/web/public_html语法是行不通的,执行后要么报错,要么直接忽略那个无效选项,根本没法达到排除目标子目录的目的。
不过别担心,有两种常用的方法可以实现你的需求:
方法一:使用find命令(最推荐)
这是Linux下处理这类“遍历排除”场景的标准方案,灵活性很高。执行以下命令:
find /home/admin/web/public_html -path /home/admin/web/public_html/content -prune -o -exec chown admin:admin {} +
命令解释:
-path /home/admin/web/public_html/content:精准匹配你要排除的目标子目录-prune:告诉find不要进入这个匹配到的目录(直接跳过它的所有内容)-o:逻辑“或”,表示前面的条件不满足时,执行后面的权限修改操作-exec chown admin:admin {} +:对所有未被排除的文件和目录批量执行chown操作,{}代表匹配到的文件/目录,+比传统的\;效率更高
如果需要排除多个目录,只需要追加对应的-path ... -prune -o片段即可,比如:
find /home/admin/web/public_html -path /home/admin/web/public_html/content -prune -o -path /home/admin/web/public_html/another_big_dir -prune -o -exec chown admin:admin {} +
方法二:使用rsync命令(适合快速场景)
如果你只是想批量修改权限,也可以利用rsync的权限修改和排除功能,通过同步目录自身来实现:
rsync -a --chown=admin:admin --exclude=content /home/admin/web/public_html/ /home/admin/web/public_html/
命令解释:
-a:归档模式,保留文件的原有属性(除了所有者,因为我们要修改它)--chown=admin:admin:将同步的文件/目录所有者统一改为admin--exclude=content:排除名为content的子目录- 路径末尾的斜杠
/很重要:如果源路径末尾加了斜杠,rsync会同步目录内的内容到目标目录,而不是额外创建一个子目录
⚠️ 注意:这个方法虽然简单,但如果目录里有大量软链接或者特殊文件,建议先在测试环境验证,避免意外修改。
内容的提问来源于stack exchange,提问作者Mitra
相关产品推荐
相关产品推荐

