tarアーカイブ内の各ファイルの内容を印刷します。

tarアーカイブ内の各ファイルの内容を印刷します。

gzipで圧縮されたtarファイルのファイルを一覧表示するのは簡単ですxvfz

$ date >> a
$ date >> b

$ cat a b
Sun Sep 24 14:27:01 IDT 2017
Sun Sep 24 14:27:05 IDT 2017

$ cat dates.tgz | tar xfvz -
x a
x b

以下の精神で各ファイルの内容をtarで印刷するエレガントな方法はありますか?

$ cat dates.tgz | tar <?> -
a:
Sun Sep 24 14:27:01 IDT 2017
b:
Sun Sep 24 14:27:05 IDT 2017

答え1

私はこれがうまくいくと思います:

tar --wildcards --to-stdout -xvf archive.tar.gz './*'

問題がある可能性がある部分に注意してください'./*'。 tarがどのようにパスにどのくらい一致するのかわかりません。明らかに、これはアーカイブに絶対パスがある場合は一致しませんが、それが良い'*'オプションであるかどうかはわかりません。

私はいくつかのtar実装が-Oそれを可能にすると信じています。 / replaceそれがGNU実装に固有のもの--to-stdoutかどうかはわかりません。--wildcards


これは使用を避けるバージョンです--wildcards

tar -xOvf archive.tar.gz $(tar -tf archive.tar.gz)

答え2

tar-Oまたはと一緒にGNUを使用する以外に、--to-stdout移植可能な方法でこれを行うための良い方法はありません。

$ tar -tvzf dates.tgz
-rw-r--r-- kk/wheel         30 2017-09-25 08:41 a
-rw-r--r-- kk/wheel         30 2017-09-25 08:41 b

$ tar -Ov -xzf dates.tgz
a
Mon Sep 25 08:41:51 CEST 2017
b
Mon Sep 25 08:41:53 CEST 2017

tarOpenBSDのBSD実装は-Oフラグをサポートせず、標準paxアーカイバはファイルを標準出力に抽出できません。

関連情報