mattintosh note

どこかのエンジニアモドキの備忘録

Mac に p7zip をインストール

p7zip は exe や cab、lha、lzh、rar などの解凍に対応しているアーカイバ。tar と組み合わせればほとんどの形式を解凍できるので入れておくと便利。

p7zip のビルド

p7zip は configure 使用しないタイプ。ソースを解凍すると中に makefile.macosx_* というファイルがあるので使用するものを選ぶ。今回は 64-bit 用を使用。

使用する makefilemakefile.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 実行時に上書きするのであれば以下のようになる。注意点は CCCXX を変更する場合は以下の点に注意。

  • $(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 のコマンド例

よく使うのが axel の4つ。説明は http://www.dotnetperls.com/7-zip-examples がわかりやすい。オプションの後はほとんどの場合スペースを入れない、パイプの場合は -si-so などのオプション(場合によってはタイプも)を忘れない。

圧縮

タイプに関しては archive.ziparchive.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 でヘルプを参照できる。