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

著書紹介

Authored Books

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

Akira Hayashi (林 晃)のアバター Akira Hayashi (林 晃) Representative(代表), Software Engineer(ソフトウェアエンジニア)

アールケー開発代表。Appleプラットフォーム向けの開発を専門としているソフトウェアエンジニア。ソフトウェアの受託開発、技術書執筆、技術指導・セミナー講師。note, Medium, LinkedIn
-
Representative of RK Kaihatsu. Software Engineer Specializing in Development for the Apple Platform. Specializing in contract software development, technical writing, and serving as a tech workshop lecturer. note, Medium, LinkedIn

目次