p7zip は exe や cab、lha、lzh、rar などの解凍に対応しているアーカイバ。tar と組み合わせればほとんどの形式を解凍できるので入れておくと便利。
p7zip のビルド
p7zip は configure 使用しないタイプ。ソースを解凍すると中に makefile.macosx_*
というファイルがあるので使用するものを選ぶ。今回は 64-bit 用を使用。
使用する makefile を makefile.machine
としてコピーする。
cp makefile.macosx_64bits makefile.machine
makefile にはコンパイラや最適化フラグなどの設定が書かれていているので環境に合わせて変更する。変更は make 実行時に変数を指定するか、makefile を編集する。
OPTFLAGS=-O # don't use -DNDEBUG in order to use MacOSX wxWidgets ALLFLAGS=-m64 ${OPTFLAGS} \ -DENV_MACOSX \ -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE \ -D_REENTRANT -DENV_UNIX \ $(LOCAL_FLAGS) CXX=c++ $(ALLFLAGS) CC=cc $(ALLFLAGS) LINK_SHARED=-bundle LOCAL_LIBS=-framework CoreFoundation LOCAL_LIBS_DLL=$(LOCAL_LIBS) OBJ_CRC32=$(OBJ_CRC32_C)
例えば make 実行時に上書きするのであれば以下のようになる。注意点は CC
と CXX
を変更する場合は以下の点に注意。
$(ALLFLAGS)
を忘れてはならない$()
がシェルのコマンド置換として展開されないように$
をバックスラッシュでエスケープするか、シングルクオートを使用する
make all3 \ CC="ccache gcc \$(ALLFLAGS)" \ CXX="ccache gcc \$(ALLFLAGS)" \ OPTFLAGS="-O3 -march=core2 -mtune=core2"
makefile を編集する場合はテキストエディタや sed
等で変更する。
sed " # 最適化フラグを変更する /^OPTFLAGS=/s/-O/-O3 -mtune=core2 -mtune=native/ # CC を ccache gcc にする /^CC=/s/cc/ccache gcc/ # CXX を ccache g++ にする /^CXX=/s/c++/ccache g++/ " makefile.macosx_64bits > makefile.machine
make のターゲットにはいくつかあり、インストールされるコマンドが異なる(詳しくは README 参照)。OS X の場合は all3
を推奨。
ターゲット | インストールプログラム |
---|---|
all | 7za sfx |
all2 | 7za sfx 7z |
all3 | 7za sfx 7z 7zr |
all4 | 7za sfx 7z 7zr Client7z 7zG 7zFM |
インストール
デフォルトのインストール先は /usr/local
。インストール先を変更する場合は DEST_HOME
変数で指定する。詳しくは makefile
参照。
以下はインストール先を /tmp/local
とする場合の例。
make install DEST_HOME=/tmp/local
追記)install.sh 内のパーミッション設定を変更しておいた方がいいかも。
sed -i "" " s/444/644/g s/555/755/g s/777/755/g " install.sh
7z のコマンド例
よく使うのが a
、x
、e
、l
の4つ。説明は http://www.dotnetperls.com/7-zip-examples がわかりやすい。オプションの後はほとんどの場合スペースを入れない、パイプの場合は -si
や -so
などのオプション(場合によってはタイプも)を忘れない。
圧縮
タイプに関しては archive.zip
や archive.tar
と書けばその形式で圧縮してくれる。
用途 | コマンド例 |
---|---|
圧縮 | 7z a archive.7z file directory |
tar を圧縮 | tar cf - directory | 7z a -si archive.tar.7z |
sfx(自己解凍形式)形式で圧縮 | 7z a -sfx /path/to/archive.exe file directory |
解凍
- e:パスを無視してその場に全てを解凍。内容によってはファイル名が被る可能性がある。
- x:パスを維持して解凍。(一般的な解凍と同じ)
用途 | コマンド例 |
---|---|
解凍(ジャンクパス) | 7z e archive.7z |
解凍(フルパス) | 7z x archive.7z |
応答無しに上書き解凍 | 7z x -y archive.7z |
解凍先を指定して解凍 | 7z x -o/path/to/dir archive.7z |
指定したものだけを解凍 | 7z x archive.7z README.txt files/man |
指定したものだけを解凍(ワイルドカード) | 7z x archive.7z '*.txt' 7z x archive.7z \*.txt |
指定したものを除外して解凍 | 7z x archive.7z -x\!\.DS_Store 7z x archive.7z -x'!.DS_Store' |
tar で解凍 | 7z x -so archive.tar.7z | tar x - 7z x -so archive.tar.7z | tar x - -C /path/to/dir |
tar のセルフ解凍 | 7z x -so archive.tar.7z | 7z x -si -ttar |
sfx 形式の場合は archive.exe ファイルが 7z と同じように動作する。archive.exe -help
でヘルプを参照できる。