7-Zip圧縮時のルート階層

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がルート空間に作られている。

software/7zip/rootdir.txt · 最終更新: 2017/09/28 by ikatakos
CC Attribution 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0