web-dev-qa-db-ja.com

Mac OS XでACLをコピーするにはどうすればよいですか?

ほとんどのUNIX派生物は、次のようにしてACLを1つのファイルから別のファイルにコピーできます。

getfacl filename1 | setfacl -f - filename2

残念ながら、Mac OS XにはACL処理がchmodに組み込まれているため、getfaclコマンドとsetfaclコマンドはありません。 chmod -Eは標準入力でACLのリストを受け入れますが、標準出力で適切な形式でACLを吐き出すコマンドを見つけられませんでした。私が思いついた最高のものは:

ls -led filename1 | tail +2 | sed 's/^ *[0-9][0-9]*: *//' | chmod -E filename2

より堅牢なソリューションはありますか?

おまけの質問:10.6に同梱されていないモジュールを使用せずに、Pythonでそれを行う良い方法はありますか?

13
MagerValp

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 "allow localadmin $ DIR_ALL"/APPBUNDLE

chmodのmanページから、この情報があります...これは、あなたが説明しているようなことを実際に実行できる可能性があることを示唆しています。

"ACLは、シンボリックモードの文法の拡張機能を使用して操作されます。各ファイルには、エントリの順序付きリストを含むACLが1つあります。各エントリは、ユーザーまたはグループを参照し、一連の権限を付与または拒否します。ユーザーとユーザーが同じ名前のグループが存在する場合、名前のタイプを指定するために、ユーザー/グループ名の前に「user:」または「group:」を付けることができます。

chmod -E stdinからACL情報を、改行で区切られたACEの順次リストとして読み取ります。情報が正しく解析されると、既存の情報が置き換えられます。

また、私は BatchMod という古いものですが、ACLの良いものである TinkerToolSystem にも一言お願いします。

8
mralexgray

statを取得して、適切な方法で出力をフォーマットできるはずです。

多分 https://github.com/jvscode/getfacl を見てください。

1
ken