Клонирование разрешений папки в другую папку

Есть ли в OS X способы клонировать разрешения одной папки на другую. Просто для ясности: я не хочу копировать всю папку, только разрешения, а затем устанавливать их для другой папки. Я думаю, что такого рода вещи могут быть достигнуты в Linux/UNIX с помощью команд setfacl/getfacl, но я не уверен, как это сделать с OS X.

Спасибо


person indragie    schedule 19.08.2009    source источник
comment
Вы пытаетесь научиться делать это в целом или как часть задачи по программированию? Если это общий вопрос, он принадлежит SuperUser.   -  person Telemachus    schedule 20.08.2009
comment
Сценарии оболочки - это программы - в StackOverflow все в порядке.   -  person Jonathan Leffler    schedule 20.08.2009
comment
@Jonathan: вопрос настолько расплывчатый, что трудно сказать, хочет ли он сделать это с помощью сценария оболочки или ему просто нужна команда оболочки.   -  person Telemachus    schedule 20.08.2009
comment
Я собираюсь использовать это в сценарии оболочки. Все в порядке, команда оболочки или скрипт, который выполняет эту задачу (клонирование разрешений)   -  person indragie    schedule 20.08.2009


Ответы (3)


Протестировано на Mac OS X v10.5.7, в bash:

chown $(stat -f%u:%g "$srcdir") "$dstdir" # Copy owner and group
chmod $(stat -f%Mp%Lp "$srcdir") "$dstdir" # Copy the mode bits
(ls -lde "$srcdir"  | tail +2 | sed 's/^ [0-9]*: //'; echo) | chmod -E  "$dstdir" # Copy the ACL

Примечания. Эти операции (особенно смена владельца), скорее всего, потребуют root-доступа; посыпать sudo для достижения наилучших результатов. Кроме того, эта нечетная команда echo в последней строке предназначена для предотвращения ошибки, если srcdir не имеет прикрепленных записей ACL (chmod -E может работать с пустыми строками, но не с полностью пустым вводом).

person Gordon Davisson    schedule 25.08.2009
comment
Спасибо за это, но увы: chmod: Unknown tag type 'inherited'. (Выход ls -e равен 0: user:_spotlight inherited allow list,search,readattr,readextattr,readsecurity,file_inherit,directory_inherit, на macos mojave) - person Simon Michael; 05.12.2019

Я полагаю, вы погуглили и нашли как минимум:

И эта веб-страница также содержит важную информацию (например, fsaclctl).

person Jonathan Leffler    schedule 19.08.2009
comment
fsaclctl предназначен для включения или отключения ACL в файловой системе, а не для управления статусом ACL для конкретной папки. Насколько я знаю, в 10.4 поддержка acl была доступна, но отключена по умолчанию, так что эта команда пригодилась. В 10.5, конечно, по умолчанию включены acls, так что он по-прежнему пригодится для отключения этих чертовых вещей. - person Telemachus; 20.08.2009
comment
Я использую chmod все время, проблема в том, что мне нужен автоматизированный процесс для клонирования разрешений из исходного каталога в целевой каталог. Chmod легко использовать вручную, но для автоматизированного процесса это может быть немного сложно. - person indragie; 20.08.2009
comment
@PCWiz: вы можете легко поместить серию chmod команд (которые вы протестировали до совершенства) в сценарий Bash и запускать их по мере необходимости. - person Telemachus; 20.08.2009
comment
Кстати, вы можете использовать ls -lde, чтобы получить список контроля доступа. - person Telemachus; 20.08.2009

В итоге я создал метод Objective C (в любом случае я планировал использовать его в приложении Cocoa), который узнает права доступа к файлу с помощью сценария perl, а затем использует chmod/chown для применения этих разрешений.

person indragie    schedule 23.08.2009