我正在尝试从我的某个驱动器上的所有文件夹中递归地删除为 johndoe 设置的 ACL,而不删除任何其他条目!有人知道如何在不影响其他组/用户已有的 ACL 的情况下执行此操作吗?
我正在寻找 Mac 版的“setfacl -du:johndoe”
我知道您可以使用 chmod 从多个文件中删除一条规则,但是我见过的唯一方法不起作用,因为它通过其索引删除规则(例如:每个文件夹的第 5 个条目)并且我的用户的条目并不总是相同的索引。
你为什么要这么做?假设你继承了一个疯狂的文件系统,其中有一群个人用户而不是群组,而你只想删除那些个人用户,因为他们已经拥有访问权限。
答案1
答案2
如果你正在寻找 GUI 应用程序,你可以使用沙盒- 然后,您可以更改 ACL 并在必要时递归应用它,但就您想要做的事情而言,它会受到一些限制。
不过,setfacl
Mac 上不支持此功能,可以chmod
使用chmod
例如chmod -R -a# [NumberOfACL] PATH
或指定chmod -R -a [ACL to delete] PATH
如果指定username allow [ACL]
为 ACL,则可以逐个删除权限。
例如,chmod -R -a "username allow read" /
将从根硬盘上任何文件夹或文件上可用的任何 ACL 中删除任何读取权限。然后,您可以对其余可用的 ACL 进行重复,如果您知道某些 ACL 总是在一起,则可以将它们串在一起,例如,读取、写入(它们必须用逗号分隔,没有空格)。
ACL 列表可从 chmod 手册页中获取(为了简洁起见),但通过将每个命令(chmod -R -a "username [ACL whether it's allow or deny]"
)放入脚本中,您可以从文件夹和任何子目录中删除单个用户的所有 ACL。您现在已在 OP 的答案中得到答案。(而且是一种更简单的方法)
答案3
我相信您可能想要 -x 而不是 -d。请务必测试一下。添加 -R 以进行递归。
setfacl -xR u:johndoe dirname