我正在搜索组织在各个子目录中的大量文本文件。我可以运行诸如 之类的命令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
以供参考: