Macで拡張ファイル属性やアクセス制御リストの属性を消す
Macのファイルシステムでは、拡張ファイル属性(Extended Attributes, EA)やアクセス制御リスト(Access Control List, ACL)というものがあり、前者は通常のファイル名やパーミッション、所有者とグループといったものとは別に属性情報を付与することができ、後者は、それらに対して個別にアクセス権を付与する仕組みです。
バックアップデータ等を取り出した時に、これらが付与されていると、通常のファイル属性をchown等で書き換えても、読み取りや書き込みができない場合があります。
そういった時のために、指定ディレクトリ以下のファイルの全てのEAやACLをクリアするスクリプトを書きました。
特に理由はありませんが、rubyを使って書いてみました。
ffi-xattrというgemを使用しています。
# rmattr.rb require 'find' require 'ffi-xattr' Find.find ARGV[0] do |file| xattr = Xattr.new file xattr.list.each do |attr| xattr.remove attr end `chmod -N \"#{File.expand_path file}\"` end
使い方
$ sudo ruby rmattr.rb [ディレクトリ名]
パラメータに指定したディレクトリ以下のEAとACLがクリアできます。
個人的に便利だったので、gemにして公開しようかなと思います。