7zipのコマンドラインは、どのフォルダが圧縮ファイル上でのルートフォルダになるか、というのがわかりづらい。
一時的なデータ通信で圧縮するだけなら特に気にすることは無いだろうけど、場合によって困ることが出てくる。
┌─ a.7z ─┐ │folder │ ルート空間にfolderがある例 │ |- file1 │=> 解凍するとfolderフォルダに │ |- file2 │ file1, file2...が入ったものができる │ |- ... │ └─────┘ ┌─ b.7z ─┐ │file1 │ ルート空間に直接fileがある例 │file2 │=> 解凍するとその場に │file3 │ file1, file2...が展開される │... │ (自動的にフォルダを作ってくれる解凍ソフトもある) └─────┘
コマンドの指定方法によってルートに置かれるファイルがどう決定されるか、どこかに書いてあるのかな。それとも詳細は制作者のみぞ知るところなんだろうか。なんて検索したら良いんだろう。
どうも、基本的には以下の要素が絡んでくる?
-r
(再帰スイッチ)を使っているかこんなフォルダ構成を考える。現在cwdにいて、そこからコマンドを発行する。
C:\cwd `-dir1 `-dir2 `-src.txt
なお、7-Zipはソースを複数指定できるが、複数まで場合分けする気力が無かったため、ソース(の指定)は1つのみとする。
ワイルドカード不使用なら、基本的にその最終ファイル or フォルダがルートになる。
> 7z a test1.7z C:\cwd\dir1\dir2\src.txt => ルート空間にsrc.txt > 7z a test2.7z C:\cwd\dir1 => ルート空間にdir1
ワイルドカードを使用したが、-r
スイッチは不使用なら、「ワイルドカードを始めて使用したファイル or フォルダ」がルートになる?
> 7z a test5.7z C:\cwd\dir1\dir2\*.txt => ルート空間にsrc.txt > 7z a test6.7z C:\cwd\dir*\dir*\*.txt => ルート空間にdir1
ワイルドカードを-r
スイッチと同時に使用したなら、「ワイルドカードを始めて使用したファイル or フォルダの、(コマンド上で)1つ左のフォルダの、(実際で)1つ下層のフォルダ」がルートになる?
> 7z a test7.7z C:\cwd\dir1\*.txt -r => ルート空間にdir2 ワイルドカードを始めて使用したのは「*.txt」 コマンド上で1つ左にあるのは「dir1」 実際のファイル構造上で1つ下層にあるのは「dir2」なので、dir2がルート空間に作られる > 7z a test8.7z C:\cwd\dir*\*.txt -r => ルート空間にdir1 ワイルドカードをはじめて使用したのは「dir*」 コマンド上で1つ左にあるのは「cwd」 実際のファイル構造上で1つ下層にあるのは「dir1」なので、dir1が以下略
絶対パスと異なり、基本的にcwdがルート空間になり、dir1がそこに作られる
> 7z a test3.7z dir1\dir2 => ルート空間にdir1 > 7z a -r test4.7z dir*\*.txt => ルート空間にdir1
「..
」で上位階層に移動した場合は、絶対パスと似たような挙動になる?
> 7z a -r test9.7z dir1\*.txt => ルート空間にdir1 > 7z a -r test10.7z ..\cwd\dir1\*.txt => ルート空間にdir2
どちらもワイルドカードと-rスイッチを使用し、同じパスを指定しているのに、「..
」を使った方は絶対パスと同様、「ワイルドカードを始めて使用したファイル or フォルダ」の、「(コマンド上で)1つ左のフォルダ」の、「(実際で)1つ下層のフォルダ」であるdir2がルート空間に作られている。