将“find”之类的输出转换为“tree”之类的输出
这个问题是树格式的ZipArchive()输出的通用版本问题。
就在我浪费时间编写这个(*nix 命令行)实用程序之前,最好先查明是否有人已经编写了它。我想要一个实用程序,它将获取一个列表作为其标准输入,例如 find(1)
返回的列表,并输出类似于 tree(1)
返回的列表code>
例如:
输入:
/fruit/apple/green
/fruit/apple/red
/fruit/apple/yellow
/fruit/banana/green
/fruit/banana/yellow
/fruit/orange/green
/fruit/orange/orange
/i_want_my_mommy
/person/men/bob
/person/men/david
/person/women/eve
输出
/
|-- fruit/
| |-- apple/
| | |-- green
| | |-- red
| | `-- yellow
| |-- banana/
| | |-- green
| | `-- yellow
| `-- orange/
| |-- green
| `-- orange
|-- i_want_my_mommy
`-- person/
|-- men/
| |-- bob
| `-- david
`-- women/
`-- eve
用法应该是这样的:
list2tree --delimiter="/" < Input > Output
Edit0: 看来我不清楚这个练习的目的。我喜欢树的输出,但我希望它用于任意输入。它可能不属于任何文件系统名称空间的一部分。
Edit1:修复了输出上的 person
分支。谢谢,@Alnitak。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
在我的 Debian 10 中,我有
tree v1.8.0
。它支持--fromfile
。这样我就可以将
find
的输出提供给tree
:问题:
如果
tree
读取/foo/whatever
或foo/whatever
那么foo
将被报告为.
的子目录。与./whatever
类似:.
将被报告为顶层下名为
。因此结果可能不完全符合您的正式期望,总会有一个顶级.
的附加级别>..
条目。即使find
找不到任何内容或抛出错误,它也会在那里。带有换行符的文件名会混淆
树
。使用find -print0
不是一个选项,因为tree
没有相应的开关。In my Debian 10 I have
tree v1.8.0
. It supports--fromfile
.This way I can feed
tree
with output fromfind
:Problems:
If
tree
reads/foo/whatever
orfoo/whatever
thenfoo
will be reported as a subdirectory of.
. Similarly with./whatever
:.
will be reported as an additional level named.
under the top level.
. So the results may not entirely meet your formal expectations, there will always be a top level.
entry. It will be there even iffind
finds nothing or throws an error.Filenames with newlines will confuse
tree
. Usingfind -print0
is not an option because there is no corresponding switch fortree
.我编写了一个 Perl 脚本,它分割路径(在“/”上),创建一个哈希树,然后使用 Data::TreeDumper 打印该树。有点 hacky,但它有效:
这是输出:
I whipped up a Perl script that splits the paths (on "/"), creates a hash tree, and then prints the tree with Data::TreeDumper. Kinda hacky, but it works:
Here's the output:
另一个工具是用 treeify rel="nofollow noreferrer">生锈。
假设你已经安装了 Rust,请使用以下命令获取它:
An other tool is treeify written in Rust.
Assuming you have Rust installed get it with:
所以,我最终写了我希望成为python树实用程序的东西。可以在 http://pytree.org 找到它
So, I finally wrote what I hope will become the python tree utils. Find it at http://pytree.org
我自己会简单地使用
tree
,但这是我几天前写的一个简单的东西,可以打印目录树。它不期望来自 find 的输入(这使得与您的要求不同),并且不执行|-
显示(这可以通过一些小的修改来完成)。你必须像这样调用它tree; <初始缩进>
。intial_indent
是第一个“列”缩进的字符数。I would simply use
tree
myself but here's a simple thing that I wrote a few days ago that prints a tree of a directory. It doesn't expect input from find (which makes is different from your requirements) and doesn't do the|-
display (which can be done with some small modifications). You have to call it like sotree <base_path> <initial_indent>
.intial_indent
is the number of characters the first "column" is indented.