Macでlsした時のパーミッションにあるアットマークを消す。xattrコマンド。
CakePHP 1.3.4がリリースされた様なのでダウンロードしました。
それはそれとして、Macで何かダウンロードしたファイルを ls コマンドで見ると、パーミッションの右に謎の @ があります。
MacBookにMongoDBをセットアップしてみた。 - kanonjiの日記 でも軽く消し方を書いたんですが、その時とはちょっと変わったのでまとめます。
@ の正体
http://journal.mycom.co.jp/column/osx/253/index.htmlEA (Extended Attributes)とは
Leopardの話に入る前に、Tigerで導入されたファイルリソース「EA (Extended Attributes)」について説明しておこう。ACL(Access Common List)もTigerからサポートされたが、デフォルトでは無効化されているため、ここでは省略する。
EAは、メタデータと総称されるファイル付加情報の1つ。ファイル名とパーミッション、ファイル作成日を除くさまざまな情報が記録され、Spotlightによる検索などに用いられる。そもそもHFS Plusは、データフォークとリソースフォーク以外のフォークを確保できるよう設計されていたが、実際には利用されてこなかった。EAが実装されたことにより、ユーザやアプリケーションが自由に、ファイルの本質とは直接関係のない修飾的な情報を保存できるようになったのだ。
Extended Attributes という名前のものらしい。
Appleでこれについてのドキュメントを、さらっと探してみたけど見つからなかった。
$ ls -l cakephp-cakephp-1.3.4-0-g703344c.zip -rw-r--r--@ 1 kanonji staff 1463815 9 12 20:24 cakephp-cakephp-1.3.4-0-g703344c.zip
ダウンロードしてきたファイルを見ると、パーミッションの横に @ があります。
$ ls -l@ cakephp-cakephp-1.3.4-0-g703344c.zip -rw-r--r--@ 1 kanonji staff 1463815 9 12 20:24 cakephp-cakephp-1.3.4-0-g703344c.zip com.apple.metadata:kMDItemWhereFroms 158 com.apple.quarantine 89
-@ オプションで、どんな Extended Attributes が付いてるかを確認できます。
Extended Attributesの消し方
com.apple.quarantine はダウンロードしてきたファイルに付くものらしいけど、com.apple.metadata:kMDItemWhereFroms はなんだろうと思って色々調べてみました。
どうやらそうらしいと言う程度だけど、こっちもダウンロードしてきたファイルに付くものらしい。
$ xattr -d com.apple.metadata:kMDItemWhereFroms cakephp-cakephp-1.3.4-0-g703344c.zip $ xattr -d com.apple.quarantine cakephp-cakephp-1.3.4-0-g703344c.zip $ ls -l@ cakephp-cakephp-1.3.4-0-g703344c.zip -rw-r--r-- 1 kanonji staff 1463815 9 12 20:24 cakephp-cakephp-1.3.4-0-g703344c.zip
xattrコマンドで、この様に Extended Attributes の削除が出来ました。
ちなみに、Extended Attributes が付いてるzipファイルを解凍すると、取り出した全ファイルに Extended Attributes が付きます。
xattrコマンド単独では、再帰的な処理は出来ないので、消すなら解凍する前が良いです。
xattrコマンド
$ whereis xattr /usr/bin/xattr $ cat /usr/bin/xattr #!/System/Library/Frameworks/Python.framework/Versions/2.5/Resources/Python.app/Contents/MacOS/Python # EASY-INSTALL-ENTRY-SCRIPT: 'xattr==0.5','console_scripts','xattr' __requires__ = 'xattr==0.5' import sys from pkg_resources import load_entry_point sys.exit( load_entry_point('xattr==0.5', 'console_scripts', 'xattr')() )
xattrはこの通り数行のPythonスクリプトです。
load_entry_point()が何かまでは、調べません。
$ xattr -h usage: xattr [-l] file [file ...] xattr -p [-l] attr_name file [file ...] xattr -w attr_name attr_value file [file ...] xattr -d attr_name file [file ...] The first form lists the names of all xattrs on the given file(s). The second form (-p) prints the value of the xattr attr_name. The third form (-w) sets the value of the xattr attr_name to attr_value. The fourth form (-d) deletes the xattr attr_name. options: -h: print this help -l: print long format (attr_name: attr_value)
xattrのUsageはこんな感じ。
$ man xattr Cannot open the message catalog "man" for locale "ja_JP.UTF-8" (NLSPATH="<none>") No manual entry for xattr
マニュアルは無い様子。
AppleDouble
EAはTigerで実装されたHFS Plus独自の機構であり、ファイル本体とは別に存在するため、HFS Plus以外のファイルシステムへコピーすると原則して失われる(通常は「AppleDouble」の機能により、EAは「._元のファイル名」という形式の別ファイルに書き出されるが)。
http://journal.mycom.co.jp/column/osx/253/index.html
Macで圧縮したファイルをWindowsに持っていくと、「._元のファイル名」という容量の小さいゴミファイルが入ってます。
どうやら、AppleDoubleという機能によって、Extended Attributesの内容を書き出したもののようです。
Extended Attributes をしっかり消しておけば、Windowsにファイル持ってった時に、ゴミファイルが出ないのかな?