shell中的目录树结构

时间:2014-03-23 23:27:37

标签: shell command

我想使用shell命令打印目录树结构,任何人都可以帮我理解如何操作吗?因为我有点新。

PS:我不能使用Sed and Octs

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

1 个答案:

答案 0 :(得分:3)

这是一个递归解决方案,效率最高但本机bash并且易于理解:

$ cat tree.sh
#!/bin/bash

shopt -s nullglob

tree()
{
        if [ "$1" = '-d' ]; then
                _TREE_DIRSONLY=1
                shift
        fi
        _tree "${1-.}"
}

_tree()
{
        local indent="${indent}"
        local dir=${1%/}

        printf "%s|-- %s\n" "${indent}" "${dir##*/}"
        indent="${indent}  "
        for file in "$1"/*; do
                if [ -d "${file}" ]; then
                        _tree "${file}"
                        continue
                fi
                (( _TREE_DIRSONLY > 0 )) && continue
                printf "%s|-- %s\n" "${indent}" "${file##*/}"
        done
}

tree "$@"

$ ./tree.sh /proc/fs
|-- fs
  |-- cifs
    |-- cifsFYI
    |-- DebugData
    |-- LinuxExtensionsEnabled
    |-- LookupCacheEnabled
    |-- MultiuserMount
    |-- SecurityFlags
    |-- traceSMB
  |-- ext4
  |-- jbd2
  |-- nfsd
  |-- nfsfs
    |-- servers
    |-- volumes
  |-- xfs
    |-- stat
    |-- xqm
    |-- xqmstat

$ ./tree.sh -d /proc/fs
|-- fs
  |-- cifs
  |-- ext4
  |-- jbd2
  |-- nfsd
  |-- nfsfs
  |-- xfs