大多数unix衍生物可以将ACL从一个文件复制到另一个:
getfacl filename1 | setfacl -f - filename2
不幸的是,Mac OS X没有getfacl和setfacl命令,因为它们已经将ACL处理转换为chmod。 chmod -E接受stdin上的一个ACL列表,但是我还没有find一个命令在stdout上以适当的格式吐出ACL。 我所想到的最好的是:
ls -led filename1 | tail +2 | sed 's/^ *[0-9][0-9]*: *//' | chmod -E filename2
有更强大的解决scheme吗?
奖金的问题:是否有一个很好的方式来做到这一点在Python中,而不使用任何模块,没有与10.6发货?
ls -e在long(-l)输出中打印与文件关联的访问控制列表(ACL)(如果存在)。
这给出了一个结果,如…
drwxr-xr-x@ 19 localadmin 646B Aug 4 00:21 APPBUNDLE 0: user:localadmin allow add_file,add_subdirectory,writeattr,writeextattr,writesecurity ⬆ ⇧ ⇶ ⬆
就我个人而言,我在~/.bash_profile有“输出”
export FILE_ALL="read,write,append,execute,delete,readattr,writeattr,readextattr,writeextattr,readsecurity,writesecurity,chown" export DIR_ALL="list,search,add_file,add_subdirectory,delete_child,readattr,writeattr,readextattr,writeextattr,readsecurity,writesecurity,chown"
使这样一个chmod可能…
sudo chmod + a“允许localadmin $ DIR_ALL”/ APPBUNDLE
从chmod手册页,有这么一点信息……暗示可能确实有可能做你喜欢描述的东西。
“每个文件都有一个ACL,包含一个有序的条目列表,每个条目都指向一个用户或组,并授予或拒绝一组权限,如果用户和组存在相同的名称,用户/组名可以用“user:”或“group:”作为前缀,以便指定名称的types。
chmod -E从标准input读取ACL信息,作为由换行符分隔的ACE的顺序列表。 如果信息parsing正确,则replace现有的信息。
另外,我会向BatchMod (一位老先生)致以敬意,但是对于ACL以及TinkerToolSystem来说 ,这也是一件好事。
你应该能够得到stat来以合适的方式格式化它的输出。