![获得“+”缩进“tree”输出的最简单方法](https://linux22.com/image/162691/%E8%8E%B7%E5%BE%97%E2%80%9C%2B%E2%80%9D%E7%BC%A9%E8%BF%9B%E2%80%9Ctree%E2%80%9D%E8%BE%93%E5%87%BA%E7%9A%84%E6%9C%80%E7%AE%80%E5%8D%95%E6%96%B9%E6%B3%95.png)
我需要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
生成此类输出但顺序可能不同的一种方法是:
$ find ./dir | sed -E ':a;s|/[^/]+/|+/|;ta' | tr / \ | sed s/./+/
相同目录结构的结果:
+ dir
++ dir2
+++ file2
+++ file1
++ dir1
+++ file2
+++ file1
答案2
使用find
和perl
:
find dir -printf "print '+'x(%d + 1),' ','%f','\n';\n" | perl