どさにっき AI 〜2018年3月中旬〜

by やまや
<< = >>

2018年3月11日(日)

圧縮 tar 玉の展開

_ 圧縮されたtarの展開方法の変遷。最近は tar+gz でも自動認識だから展開時に z やら j やらのオプションはいらんよ、とのことだが、残念。GNU tar ではいまだに z が必要。

_ こういう単純な展開をするだけならば、たしかに z はいらない。

% tar xf hoge.tar.gz
が、
% tar xf - < hoge.tar.gz
これは動かない。つまり、標準入力から tar 玉を食わせるときは圧縮形式を指定するオプションがないと動かない。上のようなコマンドを叩くことはあまりないように思うかもしれないけれど、
% tar czf - dir | ssh anotherhost tar xvf - -C /path/to/dir
こういう使い方なら日常茶飯事で、ここで GNU tar は z の指定がないとコケる。

_ 圧縮されてるから -z オプションつけろや、というエラーメッセージを出すところからして、gzip 圧縮されてるということは正しく判定できているようではある。なのに、引数にファイルを直接指定したときは展開してくれて、標準入力から食わせるとエラーにするという、どうして違う動作になるのかまったく理解できない。アホか。

_ ちなみに、GNU ではなく FreeBSD や MacOS の tar は標準入力から食わせる場合でも z その他圧縮形式を示すオプションは一切不要。そもそも圧縮形式以前に tar 形式ですらない zip やら lzh やらその他の形式もオプション指定なしで展開できる。が、だから FreeBSD tar はすげーんだぜ、というつもりはない。なぜなら、この判定とか展開とかやってる libarchive に ヤバい脆弱性がしょっちゅう見つかっていてぜんぜん信用ならんから。


<< = >>
やまや