Help us understand the problem. What is going on with this article?

Mac: ファイルの拡張属性を一気にはぎ取る

More than 3 years have passed since last update.

結論から

% xattr -cr <directory>

これで指定したディレクトリ以下にあるファイルの拡張属性をすべてクリア (c) できます。

ただし確認は El Capitan でのみやっています。手元にある Mavericks にも -c オプションと -r オプションがありましたので同様に動作すると思われます。これ以前のバージョンでは xattr-r (ディレクトリ再帰降下) オプションがないかもしれません。

拡張属性 (EA) とは

ls -l したときにパーミッションの右側に @ マークがついていることがあります。これは HFS Plus (OSX のデフォルトのファイルシステム) の拡張属性 (EA: Extended Attributes) がそのファイルについていることを示します。たとえばメールの添付ファイルを保存したときにどのメールアドレスから受け取ったファイルなのかとか、そういう情報が記録されています。

EA についての概要はマイナビニュースの OS X ハッキング! Leopard解体新書(4) ~拡張された拡張属性~ を参照してみてください。古い文書ですが大変有用です。

EAが悪さをする

EA がついたままファイルを圧縮して他の OS のユーザーにそれを渡すと、拡張属性が別ファイルとなって渡されます。丁度 .DS_Store みたいな感じにです。他人とやり取りするときはほぼ必要ない情報ですから消したいところです。

実例

% ls -lR
total 192
-rw-r--r--@ 1 tura  staff  98207 Feb 10 11:42 a.jpg
drwxr-xr-x  3 tura  staff    102 Feb 10 11:43 b/

./b:
total 192
-rw-r--r--@ 1 tura  staff  98207 Feb 10 11:43 b.jpg

-rw-r--r--@ と右端に @ がついていますよね。これが拡張属性がついている印です。指定したディレクトリ以下のファイルに付いた拡張属性を一気に消す方法は

% xattr -cr <directory>

です。以前は find やらなんやらと xattr を組み合わせないとできなかったようですが、少なくとも El Capitan の xattr には -r オプションがあります。これは指定されたディレクトリ以下を再帰的に辿って適用するオプションです。

これと find . -name '.DS_Store'|xargs rm は Makefile や Rakefile などの 擬似ターゲット/タスク に記述していつでも消せるようにしておきましょう。他社へ渡すアーカイブファイルを作るタスクの依存タスクにこの消すタスクを指定しておけば完璧です。

参考文献

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした