Большинство производных Unix могут копировать ACL из одного файла в другой с помощью:
getfacl filename1 | setfacl -f - filename2
К сожалению, в Mac OS X нет команд getfacl и setfacl, поскольку они перенесли обработку ACL в chmod. chmod -E принимает список ACL на stdin, но я не нашел команды, которая выводит ACL в подходящем формате на stdout. Лучшее, что я придумал, это:
ls -led filename1 | tail +2 | sed 's/^ *[0-9][0-9]*: *//' | chmod -E filename2
Есть ли более надежное решение?
Дополнительный вопрос: есть ли хороший способ сделать это в Python без использования каких-либо модулей, которые не поставляются с 10.6?
ls -e
Распечатайте список управления доступом (ACL), связанный с файлом, если он есть, в длинном (-l) выводе.
это дает такой результат, как ...
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 управляются с помощью расширений грамматики символьного режима. Каждый файл имеет один ACL, содержащий упорядоченный список записей. Каждая запись относится к пользователю или группе и предоставляет или запрещает набор разрешений. В случаях, когда пользователь и группы существуют с тем же именем, имя пользователя / группы может иметь префикс «пользователь:» или «группа:», чтобы указать тип имени ».
chmod -E
Читает информацию ACL из stdin как последовательный список ACE, разделенных символами новой строки. Если информация анализируется правильно, существующая информация заменяется.
Кроме того, я передам привет BatchMod, старый, но полезный для ACL, а также TinkerToolSystem.
Может взглянуть на https://github.com/jvscode/getfacl.
Вы должны получить stat
для форматирования вывода подходящим способом.