fro*_*age 5 command-line bash acl permissions
如果我有一个分配了默认 ACL 条目的目录,但其部分或全部后代文件和子目录具有访问权限或默认 ACL 与这些默认值不一致,我如何递归(重新)应用这些默认 ACL 条目给所有后代?有资格。我希望完全替换所有现有的后代 ACL,除了文件的现有执行状态。否则的目的是所有后代都应该拥有在其当前位置新创建的 ACL。
Rogach 询问“如何在目录上递归设置权限(启用 ACL)?” 但希望以递归方式添加新的ACL 条目,而不是(重新)应用现有的默认 ACL。尽管 Rogach 没有要求,富兰克林·皮亚特 (Franklin Piat) 对该问题的回答也为我的问题提供了解决方案,但我认为他的解决方案存在缺陷。Piat 建议使用以下命令:
Run Code Online (Sandbox Code Playgroud)find . -mindepth 1 -type d| xargs -n 50 setfacl -b --set-file=<(getfacl . | sed -e 's/x$/X/') find . -mindepth 1 -type f| xargs -n 50 setfacl -b --set-file=<(getfacl . | grep -v '^default:' | sed -e 's/x$/X/')
我想修复的缺陷:
理想情况下,我也只需要一个命令行来完成这一任务。
我想出了这个丑陋、低效的解决方案,但肯定有更好的方法:
\n\n( cd \'/some/dir\' && sudo find . -mindepth 1 -path \'./leave/alone\' -prune -o \\( -type d -exec bash -c \'getfacl -cd . | sed -nre "p;/^\\$/!s/^/default:/p" | setfacl -bM - "{}"\' \\; \\) -o \\( -type f -exec bash -c \'getfacl -cd . | sed -re "/^#/!s/x\\$/X/" | setfacl -bM - "{}"\' \\; \\) )\n
Run Code Online (Sandbox Code Playgroud)\n\n关于这个怪物的一些评论:
\n\n“Unix 哲学”非常棒,但是我想要完成的任务太频繁了,以至于不需要如此笨拙的命令行。除了游说setfacl中的附加功能之外,还有更好的方法吗?
\n