macOSのFinderにはファイルやフォルダを圧縮してZipファイルを作る機能が入っています。このZipファイルはWindows上で作成するZipファイルとは少し異なります。
このFinderで作られるZipファイルと同じ方式のZipファイルはターミナルからも作成できます。シェルスクリプトから実行すれば、自動処理の中で行うこともできます。
この記事では、Finderで作成されるZipファイルと同じ方式のZipファイルを作る方法と、そのZipファイルを展開する方法を解説します。
Finderの右クリック「○○を圧縮」と同じ方式のアーカイブを作る
Finderで右クリックして、「○○を圧縮」を選択したときと同じ方式のアーカイブを作るには、ditto
を使います。
$ ditto -c -k --sequesterRsrc --keepParent Test Test.zip
Test
フォルダを圧縮してTest.zip
ファイルを作ります。
-c
オプションはアーカイブ作成、-k
オプションはPKZip
を使って圧縮、--sequesterRsrc
オプションは、リソースフォークとHFSメタデータを__MACOSX
というフォルダを作って保護するオプションです。--keepParent
オプションは親ディレクトリを維持します。
ファイルだけを指定したとき
ファイルを一つだけ指定して、Zipファイルを作るときは、--keepParent
オプションが邪魔になることがあります。例えば、デスクトップに123.jpg
ファイルがあり、次のようにしてZipファイルを作ります。
$ ditto -c -k --sequesterRsrc --keepParent 123.jpg 123.zip
これを展開すると、Desktop/123.jpg
が展開されます。Desktop
という余分なフォルダが作られてしまいます。
--keepParent
オプションで123.jpg
の親ディレクトリであるDesktop
が入ってしまったのです。
ファイル単体で圧縮するときは、--keepParent
オプションを外すと上手く動きます。
但し、アプリの場合は例外です。MacのアプリはFinderではファイルのように見えますが、実体はフォルダです。そのため、--keepParent
オプションを外すと、正しく圧縮できません。
作成したZipファイルを展開する
ditto
はZipファイルを作るだけではなく、展開もできます。Finderと同じ方式のZipファイルを展開するには、次のようにします。
$ ditto -x -k TextEdit.zip ./
上記の例では、TextEdit.zip
ファイルをカレントディレクトリに展開します。./
を展開先のディレクトリに置き換えると、ディレクトリを作って、その中に展開します。
-x
オプションはアーカイブの展開を行うオプションです。-k
オプションで展開するZipファイルのフォーマットがPKZip
の形式だということを指定しています。
Finderと完全一致ではない
ditto
で作成したZipファイルですが、Finderと完全一致ではありません。試してみると分かるのですが、ファイルサイズが若干異なります。ditto
のmanにも次のように書かれています。
The command: ditto -c -k –sequesterRsrc –keepParent src_directory archive.zip will create a PKZip archive similarly to the Finder’s Compress function- ality.「similarly」とあるように、「同じ」ではなく「類似した」アーカイブになるという機能です。実用上は問題になったことはありませんが、全く同じアーカイブが出来上がるということではないです。