find配合-exec批量改权限的核心是先定位再执行,可精准区分文件与目录(如目录755、文件644)、排除特定路径(如logs/)、按名或类型筛选(如.sh加执行权、.env设600),并支持{} +提升效率。

用 find 配合 -exec 批量改权限,核心是“先定位、再执行”,比单纯用 chmod -R 更精准,能区分文件和目录、跳过特定路径、按类型或时间筛选。
区分文件和目录设不同权限
这是最常用也最安全的做法。目录需要执行权限(x)才能进入,文件通常不需要。直接递归设统一权限容易出错。
- 把 所有子目录 权限设为
755(rwxr-xr-x):find /path/to/dir -type d -exec chmod 755 {} \; - 把 所有普通文件 权限设为
644(rw-r--r--):find /path/to/dir -type f -exec chmod 644 {} \;
排除特定目录或文件不修改
比如想跳过 logs/ 或 cache/ 这类动态生成内容的子目录,避免误改日志轮转或缓存文件的权限。
- 排除某个子目录(及其下所有内容):
find /path/to/dir -type d -not -path "/path/to/dir/logs" -exec chmod 755 {} \; - 排除该目录下的所有文件:
find /path/to/dir -type f -not -path "/path/to/dir/logs/*" -exec chmod 644 {} \;
按文件名或类型精准批量设置
适合只改某类配置、脚本或敏感文件的权限,比如把所有 .sh 脚本加上执行权,或把 .env 文件设为仅属主可读写。
- 给当前目录及子目录下所有
.sh文件加执行权限:find . -name "*.sh" -type f -exec chmod u+x {} \; - 把所有
.env文件权限设为600(仅属主读写):find /app -name ".env" -type f -exec chmod 600 {} \;
用 + 替代 \; 提升执行效率
当匹配结果很多时,{} \; 是对每个文件单独执行一次 chmod;而 {} + 会把多个文件路径拼成一条命令执行,减少系统调用次数,速度更快。
- 等效但更高效的方式(注意空格和 +):
find /path/to/dir -type f -exec chmod 644 {} + - 注意:
{} +要求目标命令支持多参数,chmod支持,但像rm或自定义脚本需确认是否兼容。











