shell - 如何检查子目录的读写执行权限?
问题描述
假设我有一个文件夹“足球”,在足球文件夹中,它包含 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 来检查每一个许可.....
解决方案
您能否尝试以下解决方案。
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
,的目录的测试目录运行上面的脚本时test2
,test3
它会给出以下输出。
.
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.
推荐阅读
- tkinter - 使 tkinter 消息框可选
- c - gcc:错误:;:没有这样的文件或目录 gcc:错误:大小:没有这样的文件或目录
- angularjs - 安装 ssr.Angular 后未创建页面
- javascript - chartjs 中的标签如何使数据不可见
- python - InfluxDB:写入请求成功(HTTP 204)但不显示
- javascript - Node.js PDFjs `SyntaxError: Unexpected token '.'`
- r - R使用tmaptools为sf对象中的每一行创建边界框
- r - 是否可以从 $terms 中提取系数的名称?
- ios - 使用 CoreBluetooth 通过 BR/EDR(又名经典)的 GATT 没有 connectionEventDidOccur
- python - 如果函数在 Python 中返回模块,使用什么返回类型注释?