将 `grep -lr` 结果显示为树

将 `grep -lr` 结果显示为树

我正在搜索组织在各个子目录中的大量文本文件。我可以运行诸如 之类的命令grep -lr foobar ./,并得到如下结果:

./dirA/dirA.A/abc.txt
./dirA/dirA.A/def.txt
./dirA/dirA.A/dirA.A.A/ghi.txt
./dirA/dirA.B/jkl.txt
./dirB/mno.txt

我想要某种方式在可视化树中显示这些内容,类似于tree命令的工作方式。大致是这样的:

./
  dirA/
    dirA.A/
      abc.txt
      def.txt
      dirA.A.A/
        ghi.txt
    dirA.B/
      jkl.txt
  dirB/
    mno.txt

在一些带有堆栈的 Python 脚本中执行此操作似乎很简单,但如果有办法的话,我真的很想通过某种方法直接从 bash 执行此操作。所以我想我正在寻找一种方法来(a)格式化/转换 的输出grep,或者(b)一些其他通用的“按公共前缀缩进”实用程序,但我迄今为止无法找到。

答案1

我找到了一个解决方案,该解决方案使用的版本tree比我系统上安装的版本更新。版本 1.8.0 tree(2018 年 11 月 16 日发布)引入了该参数,该参数从文件(或)而不是文件系统本身--fromfile读取目录/文件列表,并生成树表示:stdin

$ grep -rl 'foobar' ./ |tree --fromfile -F .
./
└── ./
    ├── dirA/
    │   ├── dirA.A/
    │   │   ├── abc.txt
    │   │   ├── def.txt
    │   │   └── dirA.A.A/
    │   │       └── ghi.txt
    │   └── dirA.B/
    │       └── jkl.txt
    └── dirB/
        └── mno.txt

6 directories, 5 files

以供参考:

相关内容