`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)出力形式を指定/変換するか、(b)他の一般的な「共通プレフィックスでインデント」ユーティリティを探していますが、grepこれまでは見つかりませんでした。

ベストアンサー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

参考までに:

おすすめ記事