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
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
