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にして公開しようかなと思います。