「+」インデントされた「ツリー」出力を取得する最も簡単な方法

「+」インデントされた「ツリー」出力を取得する最も簡単な方法

tree出力のインデントを次のように+記号に置き換える必要があります。

$ tree --noreport dir
dir
├── dir1
│   ├── file1
│   └── file2
└── dir2
    ├── file1
    └── file2

次のように印刷されます。

$ tree --noreport dir
+ dir
++ dir1
+++ file1
+++ file2
++ dir2
+++ file1
+++ file2

これは非常に簡単に見えます。出力をパイプsedし、次を置き換えます。

tree --noreport | sed -e 's/├── \|└── /+ /g' -e 's/│   \|    /+/g' -e 's/^/+/' -e '1s/+/+ /'

ただし、これにはいくつかの注意事項があります(たとえば、何らかの理由でディレクトリまたはファイル名に4つのスペースがある場合)。だから、より良い方法があるかどうか疑問に思います。

編集:この特別なケースでは、tree外部ツールの出力として多くのツリーフラグを取得して使用するにfindは、可能な限り翻訳を行う必要があるため、これを行う必要がありますが、それは価値がないと思います。すでに1つの次善の作業ソリューションがあります。私がこの質問をする理由は、私が質問を複雑にしすぎて何か明らかなものを見逃していると確信しているからです。

ベストアンサー1

これらの出力を生成する1つの方法は次のとおりです。ただし、順序は異なる場合があります。

$ find ./dir | sed -E ':a;s|/[^/]+/|+/|;ta' | tr / \  | sed s/./+/

同じディレクトリ構造の結果:

+ dir
++ dir2
+++ file2
+++ file1
++ dir1
+++ file2
+++ file1

おすすめ記事