LoginSignup
30
28

More than 5 years have passed since last update.

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

Last updated at Posted at 2016-02-10

結論から

% 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 などの 擬似ターゲット/タスク に記述していつでも消せるようにしておきましょう。他社へ渡すアーカイブファイルを作るタスクの依存タスクにこの消すタスクを指定しておけば完璧です。

参考文献

30
28
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
30
28