如何快速获取项目的目录树

721 阅读4分钟

在我们编写项目的 README 时,项目的目录结构层级太多,手打项目的目录树太麻烦时怎么办。

此时可以使用Windows tree命令生成目录树。

一、Windows tree

Windows系统内置有 tree 命令,可在 CMD 或 PowerShell 中输入 help treetree/? 查看指令帮助。

tree指令帮助

  • tree:直接显示 CMD 当前路径下的所有文件夹

  • tree D:\CodeBase\tree:显示 指定路径下的目录树

  • tree/F: 显示 CMD 当前路径下的所有文件夹和文件

  • tree/A: 目录树不使用非 ASCII 字符

  • tree/A /F:使用 ASCII 字符显示带文件的目录树

tree指令使用

当遇到目录层级过多,CMD 无法完整显示时,可以在命令行语句尾部添加 > <driveletter>:\<filepath>\filename.txt。来将目录树打印到指定驱动器的对应目录的相应文件内。

例如:

tree/F>tree.txt

打印目录树到指定目录文件中

Microsoft 官方提供的 tree 指令的可选项较少。可以使用 Linux 下的 tree 包,来丰富打印目录树的功能。

二、Linux tree

Linux 下有自己的 tree 指令,Unix/Linux 系统可直接通过指令安装。

Windows 用户需要使用 Tree for Windows 工具,来获取到近似的使用体验。

Tree for Windows 工具已经很久未更新,实测 Win10 已无法使用可执行文件进行安装,只能使用二进制文件。

1. Git-Bash下使用tree命令工具

  • 打开进入 Tree for Windows 页面,选择下载 Binaries .zip 文件
  • 解压压缩包,找到压缩包内的 bin 目录,将 bin 目录下的 tree.exe 复制
  • 找到 D:\Git\usr\bin 目录(根据每个人Git安装路径不同,有所区别),将 tree.exe 粘贴到该目录下,安装即完成

Git-Bash中使用tree

2.Windows 全局使用tree命令工具

上述方法只能在 git bash 里面用,如果在其他文件夹想快速使用就很麻烦。下面介绍全局使用 tree for windows 的方法。

  • 复制 Git-Bash 一节中获取到的 tree.exe 到任意一个文件夹中
  • 将该文件夹添加到系统环境变量中
  • 打开一个 CMD 或 PowerShell,若想用 Windows 原生 tree,就直接输入tree [],若想用自定义的 tree,就输入tree.exe []

PATH配置

tree.exe使用

该工具毕竟很久未更新过,实测在 CMD 中直接使用部分指令下会有显示兼容问题。

兼容性问题

Linux tree 命令行支持以下参数:

$ tree --help
usage: tree [-adfghilnpqrstuvxACDFNS] [-H baseHREF] [-T title ] [-L level [-R]]
        [-P pattern] [-I pattern] [-o filename] [--version] [--help] [--inodes]
        [--device] [--noreport] [--nolinks] [--dirsfirst] [--charset charset]
        [--filelimit #] [<directory list>]
  -a            列出所有文件
  -d            只列出目录
  -l            如遇到性质为符号连接的目录,直接列出该连接所指向的原始目录
  -f            在每个文件或目录之前,显示完整的相对路径名称
  -i            不以阶梯状列出文件或目录名称
  -q            用”?"号取代控制字符,列出文件和目录名称
  -N            直接列出文件和目录名称,包括控制字符
  -p            列出权限标示
  -u            列出文件或目录的拥有者名称,没有对应的名称时,则显示用户识别码
  -g            列出文件或目录的所属群组名称,没有对应的名称时,则显示群组识别码
  -s            列出文件或目录大小
  -h            以更易于阅读的方式打印文件大小
  -D            打印文件最后修改日期
  -F            在执行文件,目录,Socket,符号连接,管道名称名称,各自加上"*","/","=","@","|“号
  -v            按版本排序文件
  -r            按倒序排序文件
  -t            按最后修改时间排序文件
  -x            将范围局限在现行的文件系统中,若指定目录下的某些子目录,其存放于另一个文件系统上,则将该子目录予以排除在寻找范围外
  -L level      目录展示至第level级
  -A            缩进线以ANSI图形打印
  -S            缩进线以ASCII图形打印
  -n            关闭着色(-C 覆盖).
  -C            关闭着色
  -P pattern    只列出符合规则的文件
  -I pattern    列出除了指定规则之外的文件
  -H baseHREF   打印baseHREF做为顶级目录的HTML格式
  -T string     用参数字符串替代默认的HTML标题和H1标题
  -R            当达到最大目录级别时重新运行树
  -o file       将打印内容输出至一个文件存储
  --inodes      打印每个文件的inode编号
  --device      打印每个文件所属的设备ID号
  --noreport    关闭树列表末尾的文件/目录计数
  --nolinks     关闭HTML输出中的超链接
  --dirsfirst   先列出目录,再列出文件
  --charset X   使用 X 字符集输出 HTML 和缩进行
  --filelimit # 文件夹内文件数超过 # 个的目录就不列出该文件夹。

详细可选项区别可参考该教程:强大的命令行工具:tree