Text-Processing

grep -lr 結果顯示為樹

  • March 17, 2022

我正在搜尋組織在各種子目錄中的大量文本文件。我可以執行諸如 之類的命令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)我迄今為止無法找到的其他一些通用的“indent-by-common-prefix”實用程序.

我找到了一個解決方案,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

以供參考:

引用自:https://unix.stackexchange.com/questions/694648