tar 和 tree 命令的管道?

tar 和 tree 命令的管道?

我想查看一个大压缩文件的树(特别是第二级目录),所以我使用了以下命令: tar -tf tarfile | tree -L 2

但它输出我所在目录的树,而不是压缩文件的树。其他命令工作正常,例如,如果我这样做: tar -tf tarfile | less 它可以让我正确地探索 tarfile。

我做错了什么或者我不能tree像其他命令一样通过 pipping 使用吗?如果没有,是否有其他方法只能查看压缩文件的二级目录下的文件?

答案1

tree可以通过参数接受来自标准输入的文件列表--fromfile

从文件而不是文件系统读取目录列表。命令行上提供的路径是要读取的文件而不是要搜索的目录。点 (.) 目录指示树应从标准输入读取路径。

所以你可能想尝试这样的事情:

tar -tf tarfile | tree --fromfile .

但遗憾的是,-L当您从标准输入读取时,该参数不起作用,至少在我的机器上是这样。

答案2

由于tree不读取 stdin,而是遍历实际目录结构(无论是当前目录还是指定目录),因此您需要对 tar 文件的目录进行后处理。如果 tar 文件是使用完整/绝对路径名创建的,则您需要调整范围以找到所需的目录深度。

一种选择是awk

tar -tf tarfile | awk -F/ 'NF == 3'

另一个是cut(进行唯一排序,以便超过 2 级的子目录不会导致再次报告父目录):

tar -tf tarfile | cut -d/ -f1-3 | sort -u

相关内容