首页 > 解决方案 > 如何检查子目录的读写执行权限?

问题描述

假设我有一个文件夹“足球”,在足球文件夹中,它包含 4 个文件夹 Chelsea、United、Liverpool 和 Spurs。足球文件夹中的每个子文件夹都有不同的读取、写入和执行权限......现在我将如何获得读取、写入和执行的值?如果文件夹是可读的,打印“can read”等等......是否可以检查775,777这样的东西?

 #!/bin/ksh
 for d in [subfolder]
 do
    if [subfolder can read == $permission_read ]
       printf "Can read"
     else if.........................
     else
            .........................
      fi
  done

子文件夹应该通过 Chelsea、United、Liverpool 和 Spurs 来检查每一个许可.....

标签: shellpermissionsksh

解决方案


您能否尝试以下解决方案。

cat script.ksh
GET_PERM() {
cate="$1"
element_to_check="$2"
directory="$directory"

case "$element_to_check" in
"7") echo "Directory named $directory has READ/WRITE/EXECUTE permissions for $cate.";;
"6") echo "Directory named $directory has READ/WRITE permissions for $cate.";;
"5") echo "Directory named $directory has READ/EXECUTE permissions for $cate.";;
"4") echo "Directory named $directory has READ permissions for $cate.";;
"3") echo "Directory named $directory has WRITE/EXECUTE permissions for $cate.";;
"2") echo "Directory named $directory has WRITE permissions for $cate.";;
"1") echo "Directory named $directory has EXECUTE permissions for $cate.";;
"0") echo "Directory named $directory has NULL permissions for $cate.";;
*) echo "Please check Directory named $directory has "$element_to_check" permission.";;
esac
}


while read directory
do
  echo "$directory"
  perm=($(stat -c "%a" "$directory" | awk 'length($0)>3{gsub(/./,"& ");print substr($0,3);next} {gsub(/./,"& ");print}'))
  echo "${perm[*]}"
  for i in "${perm[@]}"
  do
    ((count = count + 1))
    if [[ $count -eq 1 ]]
    then
        GET_PERM "USER/OWNER" "$i" "$directory"
    elif [[ $count -eq 2 ]]
    then
        GET_PERM "GROUPS" "$i" "$directory"
    else
        GET_PERM "OTHERS" "$i" "$directory"
    fi
  done
  unset perm
  unset count
done < <(find -type d 2>/dev/null)


脚本的作用是:

  • 它在循环find的最后一个命令while将根据您给定的路径运行(截至目前没有给出路径,因此它在当前目录上运行,可以提及您想要签入的完整路径)。
  • 它处理读取、写入和执行基本权限的基本权限,尽管我知道可能有多种权限,但我将在这里提出 OP 的要求。


上面脚本的测试运行:当我为一个包含 3 个名为test1,的目录的测试目录运行上面的脚本时test2test3它会给出以下输出。

.
7 7 5
Directory named . has READ/WRITE/EXECUTE permissions for USER/OWNER.
Directory named . has READ/WRITE/EXECUTE permissions for GROUPS.
Directory named . has READ/EXECUTE permissions for OTHERS.
./test3
7 5 5
Directory named ./test3 has READ/WRITE/EXECUTE permissions for USER/OWNER.
Directory named ./test3 has READ/EXECUTE permissions for GROUPS.
Directory named ./test3 has READ/EXECUTE permissions for OTHERS.
./test1
7 7 5
Directory named ./test1 has READ/WRITE/EXECUTE permissions for USER/OWNER.
Directory named ./test1 has READ/WRITE/EXECUTE permissions for GROUPS.
Directory named ./test1 has READ/EXECUTE permissions for OTHERS.
./test2
7 4 4
Directory named ./test2 has READ/WRITE/EXECUTE permissions for USER/OWNER.
Directory named ./test2 has READ permissions for GROUPS.
Directory named ./test2 has READ permissions for OTHERS.

推荐阅读