Finderと同じ方式のZipファイルをターミナルやシェルスクリプトで作る

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」とあるように、「同じ」ではなく「類似した」アーカイブになるという機能です。実用上は問題になったことはありませんが、全く同じアーカイブが出来上がるということではないです。
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

林 晃のアバター 林 晃 代表・ソフトウェアエンジニア

アールケー開発代表。Appleプラットフォーム向けのアプリ開発が好きなアプリ開発者。アプリの受託開発、技術書執筆、技術指導・セミナー講師。3DCGコンテンツ作成にも取組中です。

目次