使用tree生成目录树结构

有时候,当你完成一个项目后,想要展示这个项目的目录结构(如下图所示),对该项目进行文档描述性说明,用于解释其项目中各个目录以及文件代表的含义,这样便于自己和后来的同学理解

在实际开发中,对于接收毫无文档说明的project,是非常痛苦的,一份好的readme文档也是非常重要的,那怎么办?逐行手写?当然不是,接下来,一步一步带你见证奇迹

图片[1]it资源网-免费资源网-视频教程-源码下载-源码交易-程序开发-小程序开发使用tree生成目录树结构it资源网-免费资源网-视频教程-源码下载-源码交易-程序开发-小程序开发IT资源网

使用DOS中的tree命令

人用迭代,神用递归,其实说的是自己调用自己,而这个tree命令就是用递归写的

tree是DOS的一个命令

功能:以图形的方式现实应用程序或者路径的目录结构

对于tree命令在windows坏境下的使用的,执行 help命令,然后 tree /?,其他windows的dos命令也是如此

官方解释:Tree是一个递归目录列表程序,它生成一个深度缩进的文件列表。给出目录参数时,树会列出给定目录中找到的所有文件和/或目录

缺陷:在windows DOS终端下,tree对应的参数功能有限,无法过滤特定的文件,而且在git bash终端下此命令却无法使用,如果要使用,特用特定的方法,后文中提供了具体的解决方法 tree命令使用


1.  D:\公开课\2019\react\myfirstreactapp>tree /?
2.  以图形显示驱动器或路径的文件夹结构。
4.  TREE [drive:][path] [/F] [/A]
6.  /F 显示每个文件夹中文件的名称。
7.  /A 使用 ASCII 字符,而不使用扩展字符(会把当前目录下的结构给展出来)。
8.  TREE [drive:][path] [/F] [/A]

当你在当前目录下使用 tree /F或者 tree /a 这两个命令时,你会发现,它会把所有文件目录结构都给你打印出来 使用 tree /f,如下所示


│ │ README.md
│ │
│ ├─regexpu-core
│ │ │ LICENSE-MIT.txt
│ │ │ package.json
│ │ │ README.md
│ │ │ rewrite-pattern.js
│ │ │
│ │ └─data
│ │ character-class-escape-sets.js
│ │ iu-mappings.js
│ │
│ ├─regjsgen
│ │ LICENSE
│ │ package.json
│ │ README.md
│ │ regjsgen.js
│ │
│ ├─regjsparser
│ │ │ CHANGELOG
│ │ │ LICENSE.BSD
│ │ │ package.json
│ │ │ parser.js
│ │ │ README.md
│ │ │
│ │ ├─bin
│ │ │ parser
│ │ │
│ │ └─node_modules
│ │ ├─.bin
│ │ │ jsesc
│ │ │ jsesc.cmd
│ │ │
│ │ └─jsesc
│ │ │ jsesc.js
│ │ │ LICENSE-MIT.txt
│ │ │ package.json
│ │ │ README.md
│ │ │
│ │ ├─bin
│ │ │ jsesc
│ │ │
│ │ └─man
│ │ jsesc.1
│ │

使用 tree /a,如下所示

D:\公开课\2019\react\myfirstreactapp>tree /A
卷 Data 的文件夹 PATH 列表
卷序列号为 5A50-E210
D:.
+---node_modules
| +---.bin
| +---@babel
| | +---code-frame
| | | \---lib
| | +---core
| | | +---lib
| | | | +---config
| | | | | +---files
| | | | | +---helpers
| | | | | \---validation
| | | | +---tools
| | | | \---transformation
| | | | +---file
| | | | \---util
| | | \---node_modules
| | | +---.bin
| | | \---semver
| | | \---bin

如果你此时想要把目录结构保存到一个文件里,可以用如下方式


tree /f > 指定输出的文件(一般为txt格式或者readme文档)

tree /f > 指定输出的文件(一般为txt格式或者readme文档)

tree /f > list.txt

要知道,程序员哥哥是很懒的,个人强烈推荐使用命令行方式去自动化操作

注意tree命令是Windows下的一个命令,在linux下或者git命令行工具里,却无法使用,不支持tree,然而如果想要支持怎么办?

下载tree,Binaries版本(http://gnuwin32.sourceforge.net/packages/tree.htm)如下图所示

图片[2]it资源网-免费资源网-视频教程-源码下载-源码交易-程序开发-小程序开发使用tree生成目录树结构it资源网-免费资源网-视频教程-源码下载-源码交易-程序开发-小程序开发IT资源网
添加tree,将下载文件解压 bin/目录下的 tree.exe 复制到 git/usr/bin 目录中,如下图所示:
图片[3]it资源网-免费资源网-视频教程-源码下载-源码交易-程序开发-小程序开发使用tree生成目录树结构it资源网-免费资源网-视频教程-源码下载-源码交易-程序开发-小程序开发IT资源网
这是windows下tree在git命令行工具下使用文档(http://mama.indstate.edu/users/ice/tree/)

以下是tree命令在git命令行中使用文档: 此用法只在git bash中是有效,在DOS终端下,使用 tree命令仍然是系统的提供的用法,此tree非彼tree,是为了能在window下的git终端下也能够使用的一种方式,此方法提供了很多方法
itclancode@LAPTOP-1CS413BU MINGW64 /d/公开课/2019/react/myfirstreactapp
$ 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 All files are listed(列出所有文件).
 -d List directories only(只列出目录).
 -l Follow symbolic links like directories.(遵循象目录这样的符号链接)
 -f Print the full path prefix for each file(打印每个文件的完整路径前缀).
 -i Don't print indentation lines()不要打印压痕线.
 -q Print non-printable characters as '?'.(将不可打印字符打印为'?'。)
 -N Print non-printable characters as is.(按原样打印不可打印字符)
 -p Print the protections for each file.(打印每个文件的保护)
 -u Displays file owner or UID number(显示文件所有者或UID号).
 -g Displays file group owner or GID number.(显示文件组所有者或GID编号)
 -s Print the size in bytes of each file.(打印每个文件的字节大小)
 -h Print the size in a more human readable way.(以更容易被人阅读的方式打印尺寸)
 -D Print the date of last modification.(打印上次修改的日期)
 -F Appends '/', '=', '*', or '|' as per ls -F.(根据ls -F添加'/'、'='、'*'或'|'。)
 -v Sort files alphanumerically by version.(按版本对文件进行字母数字排序)
 -r Sort files in reverse alphanumeric order.(按字母数字倒序排列文件。)
 -t Sort files by last modification time.(按上次修改时间排序文件)
 -x Stay on current filesystem only.(只保留当前文件系统)
 -L level Descend only level directories deep.(只向下深入到级别目录)
 -A Print ANSI lines graphic indentation lines.(打印ANSI线图形压痕线)
 -S Print with ASCII graphics indentation lines.(用ASCII图形缩进行打印)
 -n Turn colorization off always (-C overrides).(始终关闭着色(-C覆盖))
 -C Turn colorization on always.(始终打开彩色化)
 -P pattern List only those files that match the pattern given.(只列出与给定模式匹配的文件)
 -I pattern Do not list files that match the given pattern.(不要列出与给定模式匹配的文件)
 -H baseHREF Prints out HTML format with baseHREF as top directory.(打印出以baseHREF作为顶部目录的HTML格式)
 -T string Replace the default HTML title and H1 header with string.(用字符串替换默认的HTML标题和H1标题)
 -R Rerun tree when max dir level reached.(当达到最大dir级别时重新运行树)
 -o file Output to file instead of stdout.(输出到文件而不是stdout。)
 --inodes Print inode number of each file.(打印每个文件的inode编号)
 --device Print device ID number to which each file belongs.(打印每个文件所属的设备ID号)
 --noreport Turn off file/directory count at end of tree listing.(在树列表末尾关闭文件/目录计数)
 --nolinks Turn off hyperlinks in HTML output(关闭HTML输出中的超链接).
 --dirsfirst List directories before files.(在文件之前列出目录)
 --charset X Use charset X for HTML and indentation line output.(使用charset X作为HTML和缩进行输出)
 --filelimit # Do not descend dirs with more than # files in them.(不要下载包含超过#文件的dirs)

例如:你想要生成下图的HTML格式

图片[4]it资源网-免费资源网-视频教程-源码下载-源码交易-程序开发-小程序开发使用tree生成目录树结构it资源网-免费资源网-视频教程-源码下载-源码交易-程序开发-小程序开发IT资源网
使用如下命令: tree -C -L 3 -T "欢迎关注微信itclanCoder公众号" -H "http://mama.indstate.edu/users/ice/00Tree.html" -I "node_modules" --charset=gbk -o ooTree.html
对照上面的tree命令参数的含义,不难理解上面的命令的含义 用tree命令,生成的一个目录树结构:
(-C)始终打开彩色化, -L 3(向下深入3层级目录)
-T(用字符串替换默认的HTML标题和H1标题)
-I(忽略node_modules)
–charser=gbk(设置HTML输出编码格式,这里设置gbk,中文的话,就会是乱码的,一般都是utf-8)
-o(指定输出目录) 以上就是git版在tree使用命令的参数

具体使用,可以访问 http://mama.indstate.edu/users/ice/tree/,此文档
缺点:需要你去对下载tree.exe文件格式,并手动复制到 Git\usr\bin目录下
如果想要忽略某些文件,例如: node_modules或者其他文件,要知道 node_modules一般是不要上传到代码仓库中去的,那怎么办?单纯windows这个tree命令就满足不了我们的需要,上面的方法也是可以解决了的
下面介绍其他一种方式就是npm包管理工具,肯定是能找到的,此方法无论是DOS坏境下还是git终端下,都是可以使用的
© 版权声明
THE END
喜欢就支持一下吧
点赞10赞赏 分享