You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用mkdir -p -m创建多级目录时权限未批量生效的问题咨询

问题原因与解决方案

为什么默认操作只对最后一个目录生效

这是POSIX标准对mkdir命令的规定:当使用-p选项创建多级目录时,-m指定的权限仅会应用到最后一级被创建的目录,中间的父目录会采用系统默认的目录权限(受当前umask值影响)。你遇到的750权限,就是777 - 227(umask)计算出来的默认值。

实现所有目录都为550权限的方法

方法1:逐个创建目录并指定权限

手动拆分多级路径,依次创建每个目录并指定-m 550,确保每一级都应用目标权限:

mkdir -m 550 /tmp/test1
mkdir -m 550 /tmp/test1/test2

如果路径层级更多,可以用循环简化操作:

target_dir="/tmp/test1/test2/test3"
current_path=""
# 拆分路径为各个层级
IFS='/' read -ra dir_parts <<< "$target_dir"
for part in "${dir_parts[@]}"; do
    [ -z "$part" ] && continue
    current_path="$current_path/$part"
    mkdir -m 550 "$current_path"
done

方法2:先创建多级目录,再递归修改权限

如果确认目标路径下没有已存在的文件/目录(避免误改权限),可以先创建所有目录,再用chmod -R递归修改权限:

mkdir -p /tmp/test1/test2
chmod -R 550 /tmp/test1

注意:这个方法会修改目标路径下所有子目录和文件的权限,如果该路径之前有内容,谨慎使用。

方法3:使用GNU coreutils的install命令替代

GNU的install命令支持创建多级目录并统一设置权限:

install -d -m 550 /tmp/test1/test2

这个命令会自动创建所有需要的父目录,并且所有新创建的目录都会应用-m指定的550权限,是最简洁的方案(仅适用于GNU环境,比如Linux系统)。

内容的提问来源于stack exchange,提问作者Jörg Kauke

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 08:18:09