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

CLI

macOSのFinderにはファイルやフォルダを圧縮してZipファイルを作る機能が入っています。このZipファイルはWindows上で作成するZipファイルとは少し異なります。

このFinderで作られる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の形式だということを指定しています。

スポンサーリンク
最新情報をチェックしよう!
>現役のプログラマーが書くプログラミング情報

現役のプログラマーが書くプログラミング情報

日々の開発の中での学びや分かったこと、調べたことなどを書いていくブログです。

CTR IMG