【问题标题】:create hierarchy of folders, and set permissions创建文件夹层次结构,并设置权限
【发布时间】:2020-05-29 07:21:55
【问题描述】:

mkdir 有选项:

  • -p 如果缺少则创建所有父目录
  • -m 更改用户权限。

我的问题是,-m 755 仅应用于叶目录。

mkdir -m 755 -p a/b/c -> c 的模式为 755,但 aa/b 的模式为 700。(我希望 a 和 a/b 也是 755)

有简单的解决方案吗? (或者只是迭代父母和 chmod 每个?)

【问题讨论】:

  • 无需迭代,在mkdir之后使用chmod -R 755 a即可

标签: bash mkdir


【解决方案1】:

这是 mkdir 的一些意外行为,我还假设 -m 标志会对所有创建的目录产生影响,而不仅仅是叶节点。

我看到了两种简单的方法:

  1. $ (umask 022; mkdir -p a/b/c)
  2. $ install -d -m 755 a/b/c

umask 控制由 shell 完成的所有文件创建,并且是权限位集的掩码(这使得这些值有点难以使用)。将这两个命令放在括号中意味着它只对那个子 shell 有效。

使用安装工具是另一种选择。使用 -d 选项,它的行为方式与 mkdir -p 相同,但 -m 标志将用于所有目录,而不仅仅是叶节点。 install 是 coreutils 包的一部分,很可能在任何系统上都可用。

【讨论】: