加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读