Linux命令打印一个像目录结构的树

时间:2016-04-21 16:16:35

标签: linux command-line

我试图编写一个脚本,它将在树形结构中打印目录,子目录及其文件,但不使用树命令。

示例:

DIR: A 
     f1
     f2 
     DIR: B
          f3 
DIR: C
     file1
     file21

我尝试了多种解决方案,但我总是遇到无法区分目录或文件的问题,因此我无法应用正确的格式。 " DIR:"前缀使它变得复杂。我有什么非常明显的遗失吗?

3 个答案:

答案 0 :(得分:2)

使用-d测试:

if [ -d "$path" ] ; then
    echo DIR
fi

答案 1 :(得分:0)

引自this SO question

这是您在寻找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以显示文件。

答案 2 :(得分:0)

您也可以尝试使用这些命令的变体

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

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

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

find -type d

tree -l