###拡張属性 eXtended ATTRibute (xattr)
「macOS」「拡張属性」で検索するとほとんどが拡張属性を削除する方法で、付与する方法について説明されているページが少ないことと、「macOS」「不可視ファイル」で検索するとほとんどが「.(ピリオド)」から始まるフォルダにすれば不可視になるという説明や、不可視ファイルを閲覧可能にする方法の説明ばかりだったので、ここではmacOSがFinderでの可視・不可視を指定している仕組みと、それを利用して任意のフォルダ・ファイルの可視・不可視を操作する方法をまとめてみます。
###可視・不可視を決定する拡張属性
macOSの不可視フォルダの1つとしてLibraryフォルダを見てみると、ファイルモードの末尾に拡張属性が付いていることを示す@マーク付いています。
拡張属性を操作するコマンドxattrを用いてどんな拡張属性が付いているか、Libraryフォルダを見てみるとcom.apple.FinderInfoに対して16進数で値が付加されていることがわかります。
結論から言うとこれがフォルダ・ファイルを不可視化する属性になります。
$ ls -la ~/
dwrx------@ user group Library
$ xattr -l ~/Library
com.apple.FinderInfo:
00000000 00 00 00 00 00 00 00 00 40 00 00 00 00 00 00 00 |........@.......|
00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000020
###不可視拡張属性を付与/削除する
まずは上記のLibraryフォルダから拡張属性を外してみます。
$ xattr -d com.apple.FinderInfo ~/Library
$ ls -la ~/
dwrx------ user group Library
これでLibraryに付いていたFinder(com.apple.FinderInfo)に関する拡張属性が削除され、FinderからLibraryフォルダが閲覧可能となりました。
次に、不可視拡張属性を付与します
$ xattr -wx com.apple.FinderInfo 0000000000000000400000000000000000000000000000000000000000000000 ~/Library
$ ls -la ~/
dwrx------@ user group Library
$ xattr -l ~/Library
com.apple.FinderInfo:
00000000 00 00 00 00 00 00 00 00 40 00 00 00 00 00 00 00 |........@.......|
00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000020
元通りになり、FinderからはLibraryフォルダは不可視となりました。
###まとめ
$ xattr -d com.apple.FinderInfo Folder #可視化
$ xattr -wx com.apple.FinderInfo 0000000000000000400000000000000000000000000000000000000000000000 Folder #不可視化
###補足:xattrコマンド
option | syntax | |
---|---|---|
拡張属性名の表示 | $ xattr [-lrsvx] file | |
-c | 拡張属性の全消去 | $ xattr -c [-rsv] file ... |
-d | 指定した拡張属性の消去 | $ xattr -d [-rsv] attr_name file ... |
-h | ヘルプ | |
-l | 拡張属性名と値の表示 | $ xattr -l [-rsv] file |
-p | 指定した拡張属性の値の表示 | $ xattr -p [-lrsvx] |
-r | ディレクトリを再帰的に検索 | |
-s | シンボリックリンクを辿らずリンク自体を対象とする | |
-v | 対象ファイルが1つのみの場合もファイル名を表示する | |
-w | 拡張属性値の書込 | |
-x | 拡張属性値を16進数表記とする | |
※拡張属性値を書き込む際は16進数表記で32bit単位の値である必要があるとのこと |