お知らせ
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に入ります。
