お知らせ
2016年10月23日にリライトしました。 以前のエントリには7z -x
の解釈について誤りがありました。 訂正してお詫びします。
7zとは
7-ZipはWindows用のアーカイバです。 このアーカイバがサポートする7z形式は、他の形式より圧縮率が高いとされています。 7z形式で圧縮したファイルの拡張子は7z
が使われます。
7z形式はさほどメジャーな形式ではありませんが、Linuxで7z形式を扱う機会があったので圧縮・解凍方法を中心に、メモを残しておきます。
検証に使用した環境はDebianです。 Ubuntuもパッケージ構成は同じですので、同じ手順でインストール・使用できます。
対象ソフトウェア
ソフトウェア | バージョン | 備考 |
---|---|---|
Debian | stretch | - |
p7zip-full | 16.02 | Debian公式のパッケージ。 |
p7zip | 16.02 | Debian公式のパッケージ。 |
p7zipのインストール
POSIXシステム(Unixなど)向けの7-Zipの移植がp7zipです。
Debianのp7zip関連のパッケージにはp7zip
とp7zip-full
パッケージがあります。
p7zip
には7z形式を扱う基本的なコマンドを含み、p7zip-full
パッケージは他のアーカイブ形式も扱える高機能なコマンドを含んでいます。 p7zip-full
パッケージは、p7zip
パッケージに依存します。
特にこだわりがなければ、p7zip-full
を入れるのがオススメです。 このエントリではp7zip-full
をインストールし、各コマンドの使い方について簡単に解説します。
p7zip-full
パッケージのインストール方法は以下のとおりです。
apt-get install p7zip-full
p7zipのコマンド
p7zip-full
とp7zip
パッケージが含むコマンドは以下の4つです。
コマンド | パッケージ | 特徴 | 扱えるアーカイブ形式 |
---|---|---|---|
7zr | p7zip | 単体で動作するバイナリ | 7z, xz形式のみ |
7za | p7zip-full | 単体で動作するバイナリ | 7zr より多く、7z より少ない |
7z | p7zip-full | ライブラリを使用するバイナリ | 多数 |
p7zip | p7zip | 7zr , 7za のラッパスクリプト | 上記コマンド相当 |
これらのコマンドの違いについてはArchWikiに解説を見つけました。
7z uses plugins to handle archives. 7za is a stand-alone executable. 7za handles fewer archive formats than 7z, but does not need any others. 7zr is a stand-alone executable. 7zr handles fewer archive formats than 7z, but does not need any others. 7zr is a “light-version” of 7za that only handles 7z archives.
機能としては 7z
> 7za
> 7zr
のようです。 7za
と7zr
は単体で動作するスタンドアローンなバイナリですが、いずれも7z
より扱える圧縮フォーマットが少ないとあります。 また7zr
は7za
の軽量バージョンで、7z形式のみ扱えるとあります。(実際はxz形式も使えます)
なおp7zip
はシェルスクリプトで、7zr
(または7za
)のgzip風ラッパとなっています。
7zr/7za/7zの使い方
7zr
, 7za
, 7z
の基本的なオプションの指定は同じです。 以下の例はすべて7z
コマンドで掲載しています。
7z コマンド [スイッチ...] アーカイブ名 [ファイル名...] [@リストファイル...]
圧縮
コマンドにa
を指定します。a
はアーカイブにファイルを追加するコマンドです。 アーカイブ名で指定したアーカイブが存在しなければ、新しいアーカイブを作成します。
ファイルの圧縮
複数のファイル名を指定してまとめて圧縮することができます。
以下の例はhoge.txt
, piyo.txt
, fuga.txt
を圧縮したarchive.7z
を作成する例です。
7z a archive.7z hoge.txt piyo.txt fuga.txt
ディレクトリの圧縮
ファイル名にはディレクトリも指定可能です。 この場合はディレクトリ構造を保ったままアーカイブを作成できます。
7z a archive2.7z my_dir
圧縮率の指定
-m
スイッチを使うと圧縮率の指定などが可能です。
以下は-m
スイッチのx
パラメータで圧縮率を最大の9
に指定して圧縮する例です。 x
パラメータは0(無圧縮), 3, 5, 7, 9(超圧縮)で指定でき、無指定時のデフォルトは5です。
7z a -mx=9 archive3.7z my_dir
リストファイル
リストファイルにより圧縮するファイルを指定することも可能です。
事前に対象のファイルを改行区切りで列記したリストファイルを作成して適当な名前で保存しておきます。 この例ではfilelist.txt
に以下の内容を書いておくことにします。
foo.txt
bar/baz.txt
リフトファイルを@
付きで指定すると、リストファイルに記載のファイル名を指定したように動作します。 この例だとfoo.txt
とbar/baz.txt
を圧縮できます。
7z a archive4.7z @filelist.txt
7z以外のアーカイブ形式
-t
スイッチで7z形式以外の形式も圧縮・解凍することができます。
以下は7z形式の代わりにxz形式を使用して圧縮する例です。 xz形式も従来の形式より圧縮率が高いアーカイブ形式として知られています。
7z a -txz hoge.txt.xz hoge.txt
7zr
は7z形式とxz形式しか扱えませんが、7za
や7z
はより多くのアーカイブ形式に対応しています。
一覧表示
コマンドに’l’を指定すると、アーカイブの中身を一覧表示することができます。
以下は圧縮の例で作成したarhicve4.7z
の中身を一覧表示します。
7z l archive4.7z
この例の出力は以下のとおりです。 ファイル・ディレクトリの一覧と、属性やサイズが確認できることがわかります。
7-Zip (a) [64] 16.02 : Copyright (c) 1999-2016 Igor Pavlov : 2016-05-21
p7zip Version 16.02 (locale=en_US.UTF-8,Utf16=on,HugeFiles=on,64 bits,4 CPUs Intel(R) Core(TM) i5-5200U CPU @ 2.20GHz (306D4),ASM,AES-NI)
Scanning the drive for archives:
1 file, 190 bytes (1 KiB)
Listing archive: archive4.7z
--
Path = archive4.7z
Type = 7z
Physical Size = 190
Headers Size = 178
Method = LZMA2:12
Solid = +
Blocks = 1
Date Time Attr Size Compressed Name
------------------- ----- ------------ ------------ ------------------------
2016-10-23 13:47:40 D.... 0 0 bar
2016-10-23 13:47:40 ....A 4 12 bar/baz.txt
2016-10-23 13:47:31 ....A 4 foo.txt
------------------- ----- ------------ ------------ ------------------------
2016-10-23 13:47:40 8 12 2 files, 1 folders
解凍
アーカイブを解凍するにはx
またはe
をコマンドに指定します。 デフォルトの解凍先はカレントディレクトリです。
基本的な解凍
x
はアーカイブ内のディレクトリを維持したまま解凍します。通常はこちらを使用します。
7z x archive4.7z
e
はアーカイブ内のディレクトリを無視して全ファイルを同じディレクトリに解凍します。
7z e archive4.7z
archive4.7z
は圧縮の節で作成したfoo.txt
とbar/baz.txt
を含むファイルでした。
x
コマンドではfoo.txt
とbar/baz.txt
がディレクトリ構造を保って解凍されます。
e
コマンドではfoo.txt
とbar
という空のディレクトリとbaz.txt
が同じディレクトリに解凍されます。
出力先ディレクトリの変更
-o
スイッチで出力先ディレクトリを切り替えることができます。 -o
スイッチに空白を開けずにディレクトリ名を指定して下さい。 ディレクトリはなければ作られます。
以下の例ではoutput_dir
にarhcive4.7z
を解凍します。
7z x -ooutout_dir archive4.7z
標準出力
-so
スイッチで解凍した内容を標準出力することもできます。
またアーカイブ内の特定のファイルやディレクトリを解凍することもできます。 その場合は圧縮の時のようにアーカイブ内のファイル名を指定して下さい。
以下の例は-so
との組み合わせで、archive4.7z
のbar/baz.txt
を解凍した内容を、標準出力します。
7z x -so archive4.7z bar/baz.txt
なお-so
スイッチは圧縮では非サポートです。
p7zip
p7zip
はgzip風のラッパで、シェルスクリプトです。 7za
があれば7za
、7zr
しかなければ7zr
を使用します。
コマンドの使い方はgzip
とほぼ同じです。
圧縮
オプションを指定せずにp7zip
を実行すると圧縮します。
以下の例ではhoge.txt
を圧縮したhoge.txt.7z
を作成します。
p7zip hoge.txt
gzipのように元のファイルは削除されます。 元のファイルを削除したくない場合は-k
オプションを指定します。
p7zip -k hoge.txt
注意点
-c
オプションを使うと標準出力に圧縮結果を出力できますが、注意点があります。 p7zip
の圧縮時の-c
オプションは、一時ファイルを作成してからcat
する実装です。
7z
などのコマンドが-so
スイッチでの圧縮をサポートしていないためと思われます。 一時ファイルを作成せずに7z形式で圧縮したいという要望は満たせません。
解凍
解凍には-d
オプションを指定します。
以下は先ほどのhoge.txt.7z
を解凍する例です。
p7zip hoge.txt.7z
hoge.txt
が出力されhoge.txt.7z
は削除されます。
その他
以上でざっとp7zipのコマンドで7z形式を圧縮・解凍する方法を説明しました。
このエントリでは解説していないコマンドやスイッチ、パラメータも多数あります。 詳細は各コマンドのヘルプやman、ドキュメントをご覧になることをおすすめします。
Debianならドキュメントは/usr/share/doc/p7zip-full/DOC/MANUAL/start.htm
に入ります。