你可以使用以下shell脚本来实现这个功能:

#!/bin/bash

# 指定目录
dir_path="/path/to/your/directory"

# 输出文件
output_file="tree.txt"

# 清空输出文件
> $output_file

# 遍历目录下的所有文件和子目录
function traverse() {
    local path="$1"
    local indent="$2"

    # 获取当前目录下的所有文件和子目录
    for item in "$path"/*; do
        # 如果是目录,则递归遍历
        if [ -d "$item" ]; then
            echo "${indent}├── $(basename "$item")" >> $output_file
            traverse "$item" "    $indent"
        # 如果是文件,则计算大小并输出
        elif [ -f "$item" ]; then
            size=$(du -sh "$item" | cut -f1)
            echo "${indent}├── $(basename "$item") ($size)" >> $output_file
        fi
    done
}

# 从根目录开始遍历
traverse "$dir_path" ""

# 打印生成的树状图文本文件
cat $output_file

将上述脚本保存为一个文件,例如tree.sh,并将dir_path变量设置为你想要查看的目录路径。然后在终端中运行bash tree.sh,脚本将会生成一个名为tree.txt的文件,其中包含指定目录下所有文件的大小以及树状图。