unzipのオプション

unzipのオプションを調べる際、オプションが多すぎるので覚えておけば良さそうなものだけ列挙

zip中に含まれている一覧を見る(-l)

$ unzip -l a.zip
Archive:  a.zip
  Length     Date   Time    Name
 --------    ----   ----    ----
        0  01-03-09 14:08   a/
        0  01-03-09 14:08   a/d.t
        0  01-03-09 14:08   a/c.t
        0  01-03-09 14:08   a/a/
        0  01-03-09 14:08   a/a/e.t
        0  01-03-09 14:08   a/a/g.t
        0  01-03-09 14:08   a/a/f.t
        0  01-03-09 14:08   a/b/
        0  01-03-09 14:08   a/b/h.t
 --------                   -------
        0                   9 files

zip中のディレクトリの構造を無視する(-j)

$ unzip -j a.zip 
Archive:  a.zip
 extracting: d.t                     
 extracting: c.t                     
 extracting: e.t                     
 extracting: g.t                     
 extracting: f.t                     
 extracting: h.t                     
$ ls
a.zip  c.t  d.t  e.t  f.t  g.t	h.t

展開先のディレクトリを指定する(-d)

ディレクトリは存在しなかったら作られる

$ ls
a.zip
$ unzip a.zip -d foo
Archive:  a.zip
   creating: foo/a/
 extracting: foo/a/d.t               
 extracting: foo/a/c.t               
   creating: foo/a/a/
 extracting: foo/a/a/e.t             
 extracting: foo/a/a/g.t             
 extracting: foo/a/a/f.t             
   creating: foo/a/b/
 extracting: foo/a/b/h.t             
$ ls
a.zip  foo

静かにする(-q)

まあそのとおりなんだよな。

同名のファイルが存在するとき上書きする(-o)

通常ならどうするか以下のように聞いてくる

$ :> d.t
$ unzip -j a.zip 
Archive:  a.zip
replace d.t? [y]es, [n]o, [A]ll, [N]one, [r]ename: 

ここでoオプションを使うと強制上書きする

$ echo aa > d.t
$ cat d.t
aa
$ unzip -jo a.zip 
Archive:  a.zip
 extracting: d.t                     
 extracting: c.t                     
 extracting: e.t                     
 extracting: g.t                     
 extracting: f.t                     
 extracting: h.t                     
$ cat d.t
$ 

(おまけ)実験ファイルを作り方

とりあえずmkdirと:コマンドで適当な実験ファイルを作る

$ mkdir -p a/a a/b ;:>a/c.t :>a/d.t :>a/a/e.t :>a/a/f.t :>a/a/g.t :>a/b/h.t
$ zip -qr a.zip a
$ rm -r a
$ ls
a.zip

こうすることで以下のディレクトリ構造とファイルを持ったa.zipがカレントディレクトリに出来上がる。

$ tree a
a
|-- a
|   |-- e.t
|   |-- f.t
|   `-- g.t
|-- b
|   `-- h.t
|-- c.t
`-- d.t

2 directories, 6 files