7-Zip
Windows向け圧縮・解凍ツール兼アーカイバ。圧縮率の高い7zというフォーマットを作り、広めた。
GUIからも操作できるが、コマンドラインの方が大量ファイルの連続処理などに向いているため、例をメモ。
圧縮
基本
> 7z a (※) (圧縮ファイル名) (※) (元ファイル/フォルダ名 複数可) (※)
ワイルドカード
ファイル名・フォルダ名にはワイルドカードを使える。パーサは7zの独自実装なので、OS標準のものと微妙に異なるが、細かいことなので、特に気にしなくてもよい。一応、OS標準では「*.*」は全てのファイルを表すが、7Zipではドットが含まれていないとHitしない。
スイッチ
(※)
の位置には、任意でスイッチと呼ばれる追加オプションを設定できる。スイッチは「-」にアルファベット数文字を加えた形であり、設定値がある場合は空白を置かず直後に続けて指定する。
上書きでなく追加
最初の引数である「a」が圧縮を示すコマンドだが、これはAddの略である。つまり、同名の圧縮ファイルが既に存在するとそれに加える形で更新されてしまう。
> 7z a a.7z hotate.gif │ ┌─ a.7z ─┐ ↓ ┌─ a.7z ─┐ │ika.png │====>│ika.png │ │tako.jpg │ │tako.jpg │ └─────┘ │hotate.gif│ └─────┘
既存ファイルを上書きしたり、ファイル名を変えるような機能は無いため、既存ファイルがある可能性がある場合は事前に確認する必要がある。
アーカイブ内でのパスが等しい場合は上書きされるため、中身が全く同じだとわかっている場合は、そのまま更新してもよい。
パスワード
-p
スイッチで指定
> 7z a -pPASSWORD target.7z path/to/source
特定の名前のファイルのみ圧縮
sourceフォルダ直下の.txtのみ圧縮 > 7z a target.7z path/to/source/*.txt sourceフォルダ以下の.txtのみ圧縮 > 7z a target.7z path/to/source/*.txt -r
-r
を付けると、source以下のサブフォルダも再帰的に対象になる。
特定の名前のファイルのみ除外
> 7z a target.7z path/to/source -xr!(wildcard) > 7z a target.7z path/to/source -xr@(path/to/listfile)
再帰フラグ
-x
スイッチのみの場合、圧縮ファイル内でのルートからの相対パスのみが除外判定対象となる。
加えてr
を指定すると、フォルダを再帰的に辿って探す。どのフォルダがルートとなるかわかりづらい場合もあるので、不都合が無ければ基本は指定しておいた方がよい。
C:\cwd > 7z a a.7z dir1 -x!exclude.txt => 除外されない `- dir1 > 7z a a.7z dir1 -xr!exclude.txt => 除外される(両方) |- include.txt > 7z a a.7z dir1 -x!dir1\exclude.txt => 除外される(dir1直下のみ) |- exclude.txt > 7z a a.7z dir1\*.txt -x!exclude.txt `- dir2 => 除外されない(ルートはdir1のため) |- include.txt > 7z a a.7z C:\cwd\dir1\*.txt -x!exclude.txt `- exclude.txt => 除外される(この場合、ルートは各.txtとなる)
ワイルドカード、ファイルリスト
!
でワイルドカード、@
で1行に1ファイル名を書いたリストファイルを指定できる
なお、Windowsのバッチ内で遅延評価を行っている場合は、!
が特殊な意味を持つのでエスケープの必要がある。
> 7z a target.7z path/to/source -xr^^!(wildcard)
空白を含むパス
ファイル・フォルダ名にスペースを含む場合、全体をクオートするか、パスの中のファイル・フォルダ名をクオートする。
> 7z a target.7z path/to/source "-xr!space in vaders.png" > 7z a target.7z path/to/"s o u r c e" -xr!"space in vaders.png"