Macのlsで出てくる@と向き合う

マッコスengineerなら1度は見たことあるであろうlsの結果に出力される "@"について。
今まで見て見ぬ振りをしてきたが、気になったので調べてみた。

OS X ハッキング! (253) Leopard解体新書(4) ~拡張された拡張属性~ | マイナビニュース
答えはここに書いてあるのですが
EA (Extended Attributes) と呼ばれるメタ情報であり、
EXIFなどのファイルに埋め込まれたものとは別。

EAはTigerで実装されたHFS Plus独自の機構であり、
ファイル本体とは別に存在するため、HFS Plus以外のファイルシステムへ
コピーすると原則して失われる(通常は「AppleDouble」の機能により、
EAは「._元のファイル名」という形式の別ファイルに書き出されるが)。

おお、なるほど「._元のファイル名」これいつも気になってました。
そういうことか。

EAを参照する

これも元記事に載ってますが、xattr / ls -al@ で参照可能。

$ xattr ~/Desktop/goofys_finder.png
com.apple.metadata:kMDItemIsScreenCapture
com.apple.metadata:kMDItemScreenCaptureGlobalRect
com.apple.metadata:kMDItemScreenCaptureType


$ ls -l@ ~/Desktop/goofys_finder.png
-rw-r--r--@ 1 trsw  staff  16266 Feb 3 22:04 /Users/trsw/Desktop/goofys_finder.png
    com.apple.metadata:kMDItemIsScreenCapture      42
    com.apple.metadata:kMDItemScreenCaptureGlobalRect      86
    com.apple.metadata:kMDItemScreenCaptureType    51
    com.apple.quarantine       22

EAを削除する

-d 付オプションで削除が可能ですが、一括削除機能がなかったのでshellのfunctionをつくってみました。

remove_xattr() {
  xattr $1 | xargs -Iattr xattr -d attr $1
}
$ remove_xattr some_file