CentOS目录结构如何以树形图展示?

34

在CentOS上是否有类似于tree的等效工具?

6个回答

48
如果你的Centos系统上没有安装tree(我通常建议服务器安装使用最小安装磁盘),则应在命令行中键入以下内容:
# yum install tree -y

如果安装不成功,那是因为你没有正确的软件库。我建议使用Dag Wieers的软件库:

http://dag.wieers.com/rpm/FAQ.php#B

之后你就可以进行安装:

# yum install tree -y

现在你已经可以开始使用了。一定要阅读手册页:http://linux.die.net/man/1/tree

以下简单命令将返回一个树形结构:

# tree

您也可以将此输出到文本文件中。还有很多选项..如果您想要除默认输出之外的其他内容,请阅读手册。

# tree > recursive_directory_list.txt

(^^ 在一个文本文件中以便日后查看 ^^)


-y 是什么意思? - Robert Houghton
1
-y 表示是。安装东西时不要询问我是否要继续安装。 - Lou Grossi

19
你可以制作自己的原始“树”(仅供娱乐 :))
#!/bin/bash
# only if you have bash 4 in your CentOS system
shopt -s globstar
for file in **/*
do
    slash=${file//[^\/]}
    case "${#slash}" in
        0) echo "|-- ${file}";;
        1) echo "|   |--  ${file}";;
        2) echo "|   |   |--  ${file}";;
    esac
done

谢谢,鉴于Carlos的回答,我会将这个添加到我的.bash_profile文件中。 - nsfyn55
双倍的 blah,它们正在运行 bash 3。 - nsfyn55
如果你想添加颜色:https://dev59.com/8W025IYBdhLWcg3wi2iw - Robert Houghton

11

由于在CentOS中默认没有安装tree,因此...

[user@CentOS test]$ tree
-bash: tree: command not found
[user@CentOS test]$ 

你也可以使用以下ls命令生成几乎相似的tree输出结果

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

例子:

[user@CentOS test]$ ls -R | grep ":$" | sed -e 's/:$//' -e 's/[^-][^\/]*\//--/g' -e 's/^/   /' -e 's/-/|/'
   .
   |-directory1
   |-directory2
   |-directory3
[user@CentOS directory]$ 

1
不错!怎样编辑才能显示文件名呢? - KrNeki

11

正如您在此处所看到的那样,CentOS默认情况下没有安装tree,因此您需要查找一个RPM并手动安装它。


不好意思,这不是我的服务器。谢谢你的帮助。 - nsfyn55
4
链接已损坏。以下回答有效:sudo yum install tree -y。 - zhihong

6
你在基础仓库中有一个树。展示它(yum list package-name):
# yum list tree
Available Packages
tree.i386               1.5.0-4               base

安装它:

yum install tree

(在CentOS 5和6上验证通过)

0

我需要在一台不允许我使用yum安装的远程计算机上工作。因此,我修改了bash-o-logist的答案,以获得更灵活的解决方案。

它接受一个(可选)参数,即您想要显示的子目录的最大级别。将其添加到您的$PATH中,享受一个无需安装的tree命令。

我不是shell专家(为了编写这个非常简短的脚本,我不得不Google很多次)。所以如果我做错了什么,请告诉我。非常感谢!

#!/bin/bash
# only if you have bash 4 in your CentOS system

shopt -s globstar # enable double star

max_level=${1:-10}

for file in **
do
    # Get just the folder or filename
    IFS='/'
    read -ra ADDR <<< "$file"
    last_field=${ADDR[-1]}
    IFS=' '

    # Get the number of slashes
    slash=${file//[^\/]}
    
    # print folder or file with correct number of leadings
    if [ ${#slash} -lt $max_level ]
    then
        spaces="   "
        leading=""
        if [ "${#slash}" -gt 0 ]
        then
            leading=`eval $(echo printf '"|${spaces}%0.s"' {1..${#slash}})`
        fi
        echo "${leading}|-- $last_field"
    fi
done 

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