Open2
パイプで渡された複数の .tar を 1 つの .tar として扱う
tar
の -i
を使う
さがしたらすぐに見つかる。
man の記述
-i, --ignore-zeros
アーカイブ中の 0 ばかりからなるブロックを無視する。通常、0 で埋められた 512 バイトブロックが 2 個連続すると、それはファイルの末尾 (EOF) を意味し、これに出会うと tar は読み込みを止める。 このオプションを指定すると、0 のブロックに出会っても読み込みを続けるので、 -A オプションを付けて作成したアーカイブを読み込むとき役に立つ。
-A
で作成(結合)したアーカイブ用のオプションらしい。 -A
の方を見ると圧縮したアーカイブはダメらしいのでたぶん複数の .tar.gz
だとダメかな。
実際に使うときはこんな感じ。
ghcr.io/oras-project/oras:v1.0.0
を pull しておいて下記を実行すると bin/oras
が取り出せる。最後の tar
についてる -i
がミソ。
$ docker save ghcr.io/oras-project/oras:v1.0.0 | tar -xOf- --wildcards "*layer.tar" | tar -ixf - "bin/oras"
$ ./bin/oras version
Version: 1.0.0
Go version: go1.20.2
Git commit: b58e7b910ca556973d111e9bd734a71baef03db2
Git tree state: clean