有趣的事实:如果你使用档案管理员并提取 .tar.gz 以便您取消选中“保留目录结构”,您将得到一个焦油炸弹。
tar -ztf
列出 tar 文件中的所有文件和目录。有没有办法列出 tar 文件中的所有文件,没有目录结构?
答案1
我在手册页中看不到实现此目的的方法,但您始终可以过滤结果。以下假设文件名中没有换行符:
tar tzf your_archive | awk -F/ '{ if($NF != "") print $NF }'
怎么运行的
通过将字段分隔符设置为/
,最后一个字段awk
知道 ( $NF
) 如果正在处理文件名,则为文件名;如果正在处理目录名,则最后一个字段为空(tar
在目录名中添加尾部斜杠)。因此,我们基本上是在告诉awk
打印最后一个字段(如果它不为空)。
答案2
利用 Joseph R. 的建议,我们可以使用正则[^/]$
表达式grep
查找不以/
.
tar tzf archive.tar.gz | grep -e "[^/]$"
答案3
假设所有文件名都不包含换行符:
tar -tf foo.tar | sed -e 's#.*/##' -e '\#.#!d'
/
第一个 sed 命令删除一行中最后一个命令之前的所有内容,以便仅打印文件名部分。第二个命令删除现在为空的行,即以 a 结尾的行/
,它们是目录。
答案4
用pax
(读取文件的POSIX命令tar
):
pax -'s@.*/@@' < file.tar
(列出所有文件,无论其类型如何,包括目录)。