【问题标题】:mkdir recursion with permissions具有权限的 mkdir 递归
【发布时间】:2015-01-07 17:25:53
【问题描述】:

这是一个简单的问题,我正在编写一个 bash 脚本,从 cron 调用 将 tar 文件中的文件分组并分类为一个 dir 结构。

这些目录需要一个特殊的所有者和权限,我通过 su 调用 mkdir 命令:

#!/bin/bash

... # shortened code

$PERMS=750
$DIR=/home/luser/0/01/012/0123
$OWNER=luser

... # shortened code

su -c "mkdir -m $PERMS -p $DIR" $OWNER

ll -R /home/luser/0

的输出
/home/luser/0:
total 4
drwxr-xr-x 3 luser luser 4096 Jan  7 18:13 01

/home/luser/0/01:
total 4
drwxr-xr-x 3 luser luser 4096 Jan  7 18:13 012

/home/luser/0/01/012:
total 4
drwxr-x--- 2 luser luser 4096 Jan  7 18:13 0123

/home/luser/0/01/012/0123:
total 0

只有最深的目录才能正确设置权限 (750)。

我不知道最后一个目录有多深,并且为所有 home 的文件设置权限太难了(文件太多)。

PS:我在谷歌上搜索过,但我什么也没找到。

【问题讨论】:

  • 观察日期创建的目录

标签: bash scripting


【解决方案1】:

您可以通过umask 限制对父目录的权限。这是一个例子:

PERMS=750
UMASK=$(echo "$PERMS" | tr "01234567" "76543210")
DIR=/home/luser/0/01/012/0123
OWNER=luser

su -c "umask $UMASK; mkdir -m $PERMS -p $DIR" $OWNER

在行动:

> PERMS=750
> UMASK=$(echo "$PERMS" | tr "01234567" "76543210")
> (umask $UMASK; mkdir -m $PERMS -p 1/2/3/4)
> ll -R .
.:
drwxr-x---  3 luser luser  4096 Jan  7 1:38 1/

./1:
drwxr-x--- 3 luser luser 4096 Jan  7 1:38 2/

./1/2:
drwxr-x--- 3 luser luser 4096 Jan  7 1:38 3/

./1/2/3:
drwxr-x--- 2 luser luser 4096 Jan  7 1:38 4/

【讨论】:

  • 谢谢,这是一个很好的解决方案,但现在我有两个问题: 1.- 我可以删除 mkdir 上的 -m 参数吗? 2.- 为什么 mkdir 有 -m 参数?只针对最后一个目录?
  • -m 不适用于所有创建的目录,这对我来说似乎是一个潜在的错误。我想如果没有-p,它仍然有一些用处,尽管您总是可以通过首先更改umask 来获得相同的效果。 umask 是持久的,而-m 只会影响这个命令创建的目录。
猜你喜欢
  • 1970-01-01
  • 2011-09-20
  • 2011-12-14
  • 1970-01-01
  • 2023-03-31
  • 1970-01-01
  • 1970-01-01
  • 2015-05-11
  • 2021-10-22
相关资源
最近更新 更多