打印 tar 存档中每个文件的内容

打印 tar 存档中每个文件的内容

列出 gzipped 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 与路径的精确匹配程度。显然,如果您在存档中有绝对路径,则这将不匹配,但是,我再次不确定 just 是否'*'是更好的选择。

我相信一些 tar 实现也会接受-O/代替--to-stdout.我不确定是否--wildcards是 GNU 实现所独有的。


这是避免使用的版本--wildcards

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

答案2

tar除了将 GNU与-O或 一起使用之外--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

BSDtar实现(在 OpenBSD 上)不支持-O标志,并且标准pax归档程序也无法将文件提取到标准输出。

相关内容