unix – 将`find` like输出转换为`tree` like output
发布时间:2020-12-15 21:02:58 所属栏目:安全 来源:网络整理
导读:这个问题是 Output of ZipArchive() in tree format问题的一般化版本. 就在我浪费时间编写这个(* nix命令行)实用程序之前,最好先找出是否有人写过它.我想要一个实用程序,它将作为其标准输入获取一个列表,例如find(1)返回的列表,并将输出类似于树的那个(1) 例
这个问题是
Output of ZipArchive() in tree format问题的一般化版本.
就在我浪费时间编写这个(* nix命令行)实用程序之前,最好先找出是否有人写过它.我想要一个实用程序,它将作为其标准输入获取一个列表,例如find(1)返回的列表,并将输出类似于树的那个(1) 例如.: 输入: /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 编辑0:似乎我不清楚这个练习的目的.我喜欢树的输出,但我想要任意输入.它可能不是任何文件系统名称空间的一部分. Edit1:输出上的固定人员分支.谢谢,@ Alnitak. 解决方法
我掀起了一个分割路径的Perl脚本(在“/”上),创建一个哈希树,然后使用Data :: TreeDumper打印树.有点hacky,但它的工作原理:
#!/usr/bin/perl use strict; use warnings; use Data::TreeDumper; my %tree; while (<>) { my $t = %tree; foreach my $part (split m!/!,$_) { next if $part eq ''; chomp $part; $t->{$part} ||= {}; $t = $t->{$part}; } } sub check_tree { my $t = shift; foreach my $hash (values %$t) { undef $hash unless keys %$hash; check_tree($hash); } } check_tree(%tree); my $output = DumpTree(%tree); $output =~ s/ = undef.*//g; $output =~ s/ [Hd+].*//g; print $output; 这是输出: $perl test.pl test.data |- fruit | |- apple | | |- green | | |- red | | `- yellow | |- banana | | |- green | | `- yellow | `- orange | |- green | `- orange |- i_want_my_mommy `- person |- men | |- bob | `- david `- women `- eve (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |