我pipe理Mac Mini服务器OS X 10.8.5 Server 2.2.2。 用作指定合作伙伴的文件共享,将videofile upload到文件系统最低级别(使用Filezilla访问)的各自文件夹中。 这些用户权限需要保持不变,不应超过其各自的文件夹及其子文件夹。
项目主pipe需要通过Filezilla访问所有文件,读取和写入。
目前他们能够做到这一点,每个用户对每个文件夹都有单独的权限。 我已经创build了一个“访问权限”,它具有项目所需的所有权限,并将其放在必需的最高级别的文件系统中,并应用inheritance。
我遇到的问题是将个人用户的权限从高到低排除。 当使用“传播权限”命令来应用新的ACL时,项目主pipe权限有时会从子文件夹中删除,有时却不会。
我怎样才能去recursion删除整个文件结构的特定用户权限,而不影响其余的文件夹权限?
查看chmod -a删除特定的ACL
从人chmod
-a The -a mode is used to delete ACL entries. All entries exactly matching the supplied entry will be deleted. If the entry lists a subset of rights granted by an entry, only the rights listed are removed. Entries may also be deleted by index using the -a# mode.
-R会使动作recursion
ls -le filename将列出与文件名关联的ACL
从理论上讲,你可以做这个UNTESTED(我现在就为你写的)脚本,通过所有文件recursion并删除指定用户的ACL
#!/bin/bash OLDIFS=$IFS IFS=' ' while read file do for ACL in $(ls -led $file|tail -n+2|cut -d':' -f2,3) do if [ $ACL ] && [[ $ACL =~ YourUserName ]]; then echo ACL found: $ACL echo FILE found: $file echo "Removing ACL..." chmod -a "$(echo $ACL|cut -d':' -f2)" ${file} fi done done < <(find / ) IFS=$OLDIFS
假设YourUserName是你希望撤销ACL的雇员的名字,而且/是你希望执行的文件系统中的点,如果你使用/,除非你添加了-maxdepth参数找。
更新 ,我testing了它,它正在工作。 只需将代码复制到一个文件中,并保存为aclchange.sh,然后将其放在要执行的目录的根目录下。 将文件命令更改为(查找)和YourUserName到您要删除的ACL的用户。 打开一个terminal并cd / directory / where / script_is然后键入chmod + x ./aclchange.sh。 最后是sudo ./aclchange.sh它将运行并列出从这些文件中删除的文件和ACL。