OS標準の機能で「他OS向けZIP」をつくる
MacのZIP対応において問題があるとすれば、「Mac独自の部分」の扱いだろう。OS Xで作成したZIPには、リソースフォークやメタデータまでもが収録されてしまい、Windowsなど他のOSで展開するときに混乱を招きかねない。OS Xにおいてリソースフォークは有用だが、他のOSではまったく無用の長物だ。
ファインダの機能でZIPを作成すると、ファイル本体(データフォーク)以外のファイルリソースは名前の先頭が「._
」で始まる「AppleDouble Headerファイル」として分離され、「__MACOSX
」というフォルダに保存される。Macで作成したZIPをWindowsユーザーの知人に渡したとき、「このフォルダは何?」という質問を受けたことのあるユーザーも多いことだろう。
これを取り除くサードパーティー製アプリケーションもあるが、利便性も考えれば使わないに越したことはなく、OS標準の機能を使う対処法を知っていたほうが心強い。
その対処法とは、ターミナルで「zip」コマンドを実行することだ。通常の方法でZIP書庫を作成し(ファインダの「○○○を圧縮」メニューを使えばいい)、その後ターミナルを起動、以下のとおりコマンドを入力して引数に対象のZIPファイルを指定し、行末に「"*__MACOSX*"
」を入力すればOK。ファイル名の入力が面倒な場合は、ターミナルにZIPファイルをドラッグ&ドロップし、その後「"*__MACOSX*"
」と入力すればいいだろう。
$ zip --delete [ファイル名] "*__MACOSX*"
なお、ZIP書庫にはファインダ情報が記録されたOS X独自の不可視属性ファイル「.DS_Store
」も混入されがちなため、併せて取り除いたほうがいい。だから、前述のコマンドラインは以下のとおり実行したほうがベターだ。
$ zip --delete [ファイル名] "*__MACOSX*" "*.DS_Store"
ターミナルの利用はまだしも、毎回「"*__MACOSX*" "*.DS_Store"
」などと入力するのは我慢できないという場合は、以下のとおりbashのログインスクリプトに関数を定義しよう。以下のリストを「~/.bashrc
」に追加し、ターミナルまたはシェルを起動し直せば、「undot
」に続けてZIPファイルを指定するだけでAppleDouble Headerファイルと「.DS_Store
」を一気に取り除ける。なかなか実用的と思うが、いかがだろう?
function undot(){
/usr/bin/zip --delete $@ "*__MACOSX*" "*.DS_Store"
}