![打印 tar 存档中每个文件的内容](https://linux22.com/image/118522/%E6%89%93%E5%8D%B0%20tar%20%E5%AD%98%E6%A1%A3%E4%B8%AD%E6%AF%8F%E4%B8%AA%E6%96%87%E4%BB%B6%E7%9A%84%E5%86%85%E5%AE%B9.png)
列出 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
归档程序也无法将文件提取到标准输出。