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

时间:2013-01-08 20:12:32

标签: shell

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

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

我该怎么做?

5 个答案:

答案 0 :(得分:21)

尝试这样做(不完全相同的输出,但非常接近):

find ./ -type d -print | sed -e 's;[^/]*/;|____;g;s;____|; |;g'

来自http://mlsamuelson.com/content/tree-approximation-using-find-and-sed

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

请参阅http://www.unix.com/shell-programming-scripting/50806-directory-tree.html

答案 1 :(得分:12)

你可以启动:

tree .

OR

tree $absolute/path/of/your/dir

如果要显示隐藏文件。

默认情况下,树不会打印隐藏文件(以点开头的文件&#39;。&#39;),只需输入:

tree -a .

这是树命令的作用。

答案 2 :(得分:3)

修改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='/'

答案 3 :(得分:2)

根据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

答案 4 :(得分:-1)

ls -R | grep“:$”| sed -e's /:$ //'-e's / [^ - ] [^ /] * // - / g'-e's / ^ / /'-e's / - / | / “

取自此处:http://www.centerkey.com/tree/