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

投稿者プロフィール

林 晃
林 晃macOS/iOSアプリ/SDK/ミドルウェア開発が専門の開発者
アールケー開発代表。macOS/iOSアプリ/SDK/ミドルウェア開発が専門の開発者。ObjC/Swift/C++使い。豊富な開発実務経験を基に、教育コンテンツ開発、技術書執筆、技術指導、技術セミナー講師、企業内研修講師、行政・自治体職員研修講師も行います。

基礎から学ぶMetal


「基礎から学ぶMetal」を執筆しました。本書はMetalを使ってGPUプログラミングを行うための最初のステップを解説するMetalの解説書です。

私が初めてGPUプログラミングを行ったとき、どこから手をつけて、学んでいけば良いのか分からず呆然としました。もし、あのとき、これを教えてくれればという部分を解説しました。本書で解説している部分はMetalの基礎となる部分で、Metalを使うときに必ず触れることになる部分です。

詳細

基礎から学ぶSwiftUI


「基礎から学ぶ SwiftUI」というタイトルの本を執筆しました。

SwiftUIの入門書です。

SwiftUIのコンセプトは「ユーザーインターフェイスを作るための最短パスを提供する」「一度学べば(Appleのプラットフォームの)どこにでも適用できる」です。

SwiftUIの概要から始まって、一つ一つのテクノロジートピックに注目しながらSwiftUIとは何か?どんなことができるのか?どのようなコードを書けば良いのかなどを丸々一冊使って解説しています。

詳細

関連記事

  1. APFS非対応のOSでも開けるディスクイメージの作り方

  2. 【Python】loggingを使ってログを出力する

  3. 【Python】ArgumentParserでコマンドライン引数を取得…

最近の著書

  1. 基礎から学ぶ SwiftUI

最近の記事