以树形格式递归列出所有目录

21

我想使用Shell脚本模拟tree命令,以此格式递归显示所有目录:

.
|-- Lorem
|-- Lorem
|-- Lorem
    |-- Lorem
    |-- Lorem
|-- Lorem
`-- Lorem

我该怎么做?

5个回答

33

太棒了!但我如何使用awk而不是sed来实现呢? - Zeno Rocha

15

您只需启动:

tree .

或者

tree $absolute/path/of/your/dir

如果您想显示隐藏文件。

默认情况下,tree命令不会打印以点“.”开头的隐藏文件,只需键入:

tree -a .

这是tree命令的作用。


10
你读了这个问题吗?“我想要使用……来模拟一个tree命令。” - Zeno Rocha
一个解释是一些Linux机器被阻止下载“tree”,需要DIY解决方案。 - MinneapolisCoder9
tree命令并不是“模拟”tree命令。它就是tree命令,所以你不能使用它。 - Phillip H. Blanton

4
修改sputnick的答案以更接近您原始的格式(我更喜欢的):
find ./ -type d -print | sed -e 's;[^/]*/; /;g;s;/ ;    ;g;s;^ /$;.;;s; /;|-- ;g'

现在唯一的区别是最后一行不以反引号开头:
.
|-- Lorem
|-- Lorem
|-- Lorem
    |-- Lorem
    |-- Lorem
|-- Lorem
|-- Lorem

使用

find . -type d -print 2>/dev/null | awk '!/\.$/ {for (i=1;i<NF-1;i++){printf("    ")}printf("|-- ")};{print $NF}' FS='/'

4

基于来自http://www.unix.com/shell-programming-scripting/50806-directory-tree.html 的awk脚本进行修改。

pwd;find . -type d -print 2>/dev/null|awk '!/\.$/ {for (i=1;i<NF-1;i++){printf("│   ")}print "├── "$NF}'  FS='/'

输出结果更类似于tree命令:

/etc
├── sudoers.d
├── susehelp.d
│   ├── htdig
├── sysconfig
│   ├── SuSEfirewall2.d
│   │   ├── services
│   ├── network
│   │   ├── if-down.d
│   │   ├── if-up.d
│   │   ├── providers
│   │   ├── scripts
│   ├── scripts
├── sysctl.d
├── systemd
│   ├── system
│   │   ├── default.target.wants
│   │   ├── getty.target.wants
│   │   ├── multi-user.target.wants

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接