2010-08-11 113 views
329

的形式是否有任何Linux命令,我可以从一个bash脚本调用,将打印的目录结构树的形式,例如,Linux命令打印目录结构树

folder1 
    a.txt 
    b.txt 
folder2 
    folder3 
+7

只需运行'find'。或者'发现。 -not -path'*/\。*''隐藏以'.'开头的文件和文件夹。如果你想用空格输出,就像在问题中一样,用这个“find prettifier”脚本:'find。 -not -path'*/\。*'| python -c“import sys as s; sa = []; [setattr(s,'a',list(filter(lambda p:c.startswith(p +'/'),sa)))或(s.stdout。在s.stdin中写入(''* len(sa)+ c [len(sa [-1])+ 1 if sa else 0:])或者真)和saappend(c [: - 1] “' – user 2014-06-14 00:49:53

+5

不应该将这些问题迁移到超级用户而不是关闭? – Balmipour 2015-10-10 10:34:23

+1

@Balmipour:也许他们应该。但是“只有不到60天的问题才可以迁移”([什么是迁移,它是如何工作的?](http://meta.stackexchange.com/a/10250/248863))。不要问我为什么。 – user 2015-11-24 22:17:41

回答

550

这是你寻找tree,应在大多数发行版(也许作为一个可选安装)是什么?

~> tree -d /proc/self/ 
/proc/self/ 
|-- attr 
|-- cwd -> /proc 
|-- fd 
| `-- 3 -> /proc/15589/fd 
|-- fdinfo 
|-- net 
| |-- dev_snmp6 
| |-- netfilter 
| |-- rpc 
| | |-- auth.rpcsec.context 
| | |-- auth.rpcsec.init 
| | |-- auth.unix.gid 
| | |-- auth.unix.ip 
| | |-- nfs4.idtoname 
| | |-- nfs4.nametoid 
| | |-- nfsd.export 
| | `-- nfsd.fh 
| `-- stat 
|-- root ->/
`-- task 
    `-- 15589 
     |-- attr 
     |-- cwd -> /proc 
     |-- fd 
     | `-- 3 -> /proc/15589/task/15589/fd 
     |-- fdinfo 
     `-- root ->/

27 directories 

取自维护者网页的样本。

您可以添加选项-L #,其中#被数字替换,以指定最大递归级别。

删除-d也显示文件。

+42

任何访问者看到这个注意事项:删除'-d'来显示文件! – default 2013-05-11 08:49:12

+10

使用Ubuntu v12.04,这未预先安装。 – gbmhunter 2013-08-20 21:17:55

+2

不是在CentOS 6中安装的,但是一个快速的'yum安装树'得到它。 – Adam 2014-02-13 23:28:26

199

您可以使用这一个:

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

它显示了当前子目录的图形表示,例如在在/ var /缓存/

. 
    |-apache2 
    |---mod_cache_disk 
    |-apparmor 
    |-apt 
    |---archives 
    |-----partial 
    |-apt-xapian-index 
    |---index.1 
    |-dbconfig-common 
    |---backups 
    |-debconf 

Source

+5

如果你想要它的空间,更像OP所要求的,那么这个: 'ls -R | grep“:$”| sed -e's /:$ //'-e's/[^ - ] [^ \ /] * \ ///g'-e's/^//'' – Ben 2013-10-04 00:56:06

+0

任何我可以忽略的方法点文件?例如。阻止它列出'.git'的内容? – GMA 2014-04-25 06:31:13

+0

@GeorgeMillo请参阅[我的评论](http://stackoverflow.com/questions/3455625/linux-command-to-print-directory-structure-in-the-form-of-a-tree#comment37392136_3455625) – user 2014-06-14 00:55:02

9

要Hassou的解决方案添加到您的.bashrc,请尝试:

alias lst='ls -R | grep ":$" | sed -e '"'"'s/:$//'"'"' -e 
      '"'"'s/[^-][^\/]*\//--/g'"'"' -e '"'"'s/^/ /'"'"' -e '"'"'s/-/|/'"'" 
+5

如果直接复制它,请注意第一行末尾的换行符 – Rahul 2016-08-05 16:46:42