結論: gzip(map(zcat, f...)) = cat(f...) として扱える仕様
複数のファイルをcatししたものをgzipで固められる。当たり前
$ echo a > a.txt
$ echo b > b.txt
$ echo c > c.txt
$ cat a.txt b.txt c.txt
a
b
c
$ cat a.txt b.txt c.txt | gzip > abc.txt.gz
$ zcat abc.txt.gz
a
b
c
zcatを使えば展開できるから、すでに固められた複数のファイルを展開して連結してgzipで固めることができる。当たり前
$ gzip a.txt
$ gzip b.txt
$ gzip c.txt
$ ls -1
a.txt.gz
abc.txt.gz
b.txt.gz
c.txt.gz
$ zcat a.txt.gz b.txt.gz c.txt.gz | gzip > abc.txt.gz
$ zcat abc.txt.gz
a
b
c
すでに固められたファイルを(zcatではなくてバイト単位の)catでつなげても正しいgzipファイルが得られるという仕様。すごい
$ rm abc.txt.gz
$ cat a.txt.gz b.txt.gz c.txt.gz > abc.txt.gz
$ zcat abc.txt.gz
a
b
c
ちょっとまて。中味が空のファイルもgzipでは大きさあったよね???
$ touch empty.txt
$ gzip empty.txt
$ ls -l
合計 20
-rw-rw-r-- 1 toshihiro toshihiro 28 9月 26 03:04 a.txt.gz
-rw-rw-r-- 1 toshihiro toshihiro 84 9月 26 03:06 abc.txt.gz
-rw-rw-r-- 1 toshihiro toshihiro 28 9月 26 03:04 b.txt.gz
-rw-rw-r-- 1 toshihiro toshihiro 28 9月 26 03:04 c.txt.gz
-rw-rw-r-- 1 toshihiro toshihiro 30 9月 26 03:06 empty.txt.gz
lsの結果の最後の行。空のファイルをgzipで固めたファイルは30バイトある。
んじゃ、この30バイトのファイルをcatで3回つなげたファイルを作ると・・・
$ cat empty.txt.gz empty.txt.gz empty.txt.gz > empty3times.txt.gz
$ ls -l
合計 24
-rw-rw-r-- 1 toshihiro toshihiro 28 9月 26 03:04 a.txt.gz
-rw-rw-r-- 1 toshihiro toshihiro 84 9月 26 03:06 abc.txt.gz
-rw-rw-r-- 1 toshihiro toshihiro 28 9月 26 03:04 b.txt.gz
-rw-rw-r-- 1 toshihiro toshihiro 28 9月 26 03:04 c.txt.gz
-rw-rw-r-- 1 toshihiro toshihiro 30 9月 26 03:06 empty.txt.gz
-rw-rw-r-- 1 toshihiro toshihiro 90 9月 26 03:07 empty3times.txt.gz
・・・予想通り、90バイトのファイルができた。その中味は?・・・
$ zcat empty3times.txt.gz
$
・・・やっぱり空だった。シェルの作業を楽にするためのすごく練られた仕様。びっくりした