コマンドラインで dmg と xz

xz と hdiutil コマンドによるファイル圧縮を使ってみる。7z の自己解凍形式もおまけ程度に。

配布用アプリケーション用にシェルスクリプトを書いてるんだけど、dmg 形式と xz 形式を作りたかったのでちょっと調べてみた。


dmg

man を読んでみるとものすごく多機能みたいなんだけど、単純にフォルダをディスクイメージにするだけならほとんどのオプションは必要ない(Finder から作れるくらいだし)。-srcfolder-srcdir は同意。MacOS のバージョンによって書き方が違ったりするようなので一度マニュアルを見ておいたほうがいいかも。色々遊べそう。

bash
$ hdiutil create -srcfolder ${input} ${output}.dmg


xz

MacPorts 版の xz を使用。単体のファイルに対してしか使えないらしいので事前に tar でひとつにまとめておく。パイプとリダイレクトでワンライナーにできる。テストでは上のディスクイメージに比べて約4割の縮小できた。ただし、出力に時間がかかる。

bash
$ tar cf - ${input} | xz > ${output}.tar.xz


7z

MacPorts 版の p7zip を使用。基本的な使い方は何度か書いているので今回は自己解凍形式について。出力に -sfx を指定すると自己解凍形式

bash
$ 7z a -sfx ${output}.exe ${input}

作成したアーカイブは実行ファイルになっているので Mac の場合は解凍するアプリケーションがなくてもターミナルで実行すればアーカイブが自分で展開してくれる。

bash
$ archive.exe

7-Zip SFX 9.20  Copyright (c) 1999-2010 Igor Pavlov  2010-11-18
p7zip Version 9.20 (locale=utf8,Utf16=on,HugeFiles=on,2 CPUs)

Processing archive: archive.exe

Extracting…

Trackback