如何用Shell命令递归修改指定目录dodo/tata/rere/tyty/toto/的权限?
仅修改目标目录下所有子目录权限的解决方案
问题分析
你执行chmod -R 777 dodo/tata/rere/tyty/toto/后仅修改了toto目录本身权限,大概率是以下两种情况:
toto目录下没有任何子目录或文件,递归操作自然只作用于目录本身;- 你实际需求是仅修改
toto下的子目录权限,而非所有内容(含文件),但chmod -R会同时修改目录和文件。
针对性解决方案
1. 递归修改toto下所有内容(子目录+文件)的权限
如果需要修改toto目录及其内部所有子目录、文件的权限,确保路径正确的前提下,执行以下命令即可:
chmod -R 777 dodo/tata/rere/tyty/toto
注:路径末尾带不带斜杠
/不影响递归效果,若执行后仍仅修改了toto本身,可先通过ls -la dodo/tata/rere/tyty/toto/确认该目录下是否有内容。
2. 仅修改toto下所有子目录的权限(排除文件)
如果只想修改toto内部的所有子目录(包括嵌套的子目录)权限,不改动文件,使用find命令精准匹配目录类型:
find dodo/tata/rere/tyty/toto/ -type d -exec chmod 777 {} +
-type d:仅筛选出目录类型的对象;-exec chmod 777 {} +:对所有找到的目录批量执行权限修改,比逐个执行的-exec ... \;效率更高。
注意事项
777权限意味着任何系统用户都能对该目录进行读、写、执行操作,安全性极低,生产环境建议根据实际需求调整为更合理的权限(比如755:所有者可读写执行,其他用户仅读和执行)。
内容的提问来源于stack exchange,提问作者Ochees
相关产品推荐
相关产品推荐

