以树状格式列出 tarball 的内容

以树状格式列出 tarball 的内容

根据答案这里我能够以ls格式列出我的 tarball 的内容。但是,我希望能够以tree格式列出它们,即以后者而不是前者的形式列出它们:

tar

$ tar -tf foo.tar 
foo/
foo/baz/
foo/baz/qux/
foo/baz/qux/hisfile.txt
foo/bar/
foo/bar/myfile.txt
foo/bar/yourfile.txt

tree

$ tree foo
foo
├── bar
│   ├── myfile.txt
│   └── yourfile.txt
└── baz
    └── qux
        └── hisfile.txt

不解压 tarball 可以做到这一点吗?由于 tarball 的大小,我宁愿避免解压 tarball。

答案1

有多个脚本可用于将路径名列表转换为树形式:

所有这些脚本都适用于tar -tf …输出;例如:

$ tar -tf foo.tar | treeify
 ─酒吧
 │ │ ─我的文件.txt
 │ └─你的文件.txt
 └─巴兹
    └─qux
       └─他的文件.txt

还:

$ bsdtar -tf foo.zip | treeify
$ find /dir -size +5 | treeify
$ git ls-files       | treeify
$ pacman -Qql foopkg | treeify
$ unrar vb foo.rar   | treeify
$ zipinfo -1 foo.zip | treeify
$ gsettings list-schemas   | treeify -s. -f
$ qdbus | sed -n "s/^ //p" | treeify -s. -f
$ ldns-walk netbsd.org | awk '{print $1}' | treeify -s. -f -R

答案2

这只是对 user1686 的回答的补充,尽管我的声誉不足以发表评论。虽然他的脚本确实能很好地完成工作,但它们需要下载,而tree实际上可以在本地执行此操作:

$ tar tf foo.tar | tree --fromfile .
.
└── foo
    ├── bar
    │   ├── myfile.txt
    │   └── yourfile.txt
    └── baz
        └── qux
            └── hisfile.txt

4 directories, 3 files

请注意,与大多数工具不同,tree使用点.而不是破折号-来从标准输入读取输入:

INPUT OPTIONS
    --fromfile
        Reads a directory listing from a file rather than the file-system.
        Paths provided on the command line are files to read from rather than directories to search.
        The dot (.) directory indicates that tree should read paths from standard input.

这允许人们使用典型的树函数,如通配符,尽管显然无法显示大小,并且级别参数(-L)显然也不起作用......

相关内容