[一招解决 TroubleShooting] 如何快速生成文件目录结构

142 阅读3分钟

需求背景

在做项目readme文档编辑或者博客编辑时,我们需要一个清晰的文件目录结构,帮助我们对我们的项目结构做分析;如下所示:

.
├── README.md
├── api_definition
├── commitlint.config.js
├── cypress.json
├── file.txt
├── package-lock.json
├── package.json
├── public
├── src
├── tsconfig.json
└── webhook

tree 模块

维基百科 tree

如果不提供其它参数,tree 将列出当前目录下的文件。如果提供了目录的参数,tree 将逐个列出其目录下的全部文件和路径。

Linux 下的 tree 命令在列完全部文件和目录之后,会输出全部列出的文件和目录的数量。输出所使用的字符和颜色可以通过参数来切换。

mac中需要安装tree模块,在windows中可以直接使用tree模块或者全局安装;以下为mac系统举例:

brew install tree # install tree for  mac 

tree 常用命令

tree 显示默认的所有层级的目录结构;
tree -o name 输出(output)保存目录到一个文件中,比如执行tree -o tree.txt可以将项目的目录结构保存到tree.txt文件中;
tree -D 只显示文件夹;
tree -L n 显示多少层级(Level)的项目目录。n表示层级数。比如想要显示项目根目录,可以用tree -L 1;
tree -I pattern 用于忽略(Ignore)不想要显示的文件或者文件夹。比如你想要忽略项目中的node_modules文件夹,可以使用tree -I "node_modules";
更多命令执行tree --help查看

更多命令查看 tree --help

   
  -a            All files are listed.
  -d            List directories only.
  -l            Follow symbolic links like directories.
  -f            Print the full path prefix for each file.
  -x            Stay on current filesystem only.
  -L level      Descend only level directories deep.
  -R            Rerun tree when max dir level reached.
  -P pattern    List only those files that match the pattern given.
  -I pattern    Do not list files that match the given pattern.
  --gitignore   Filter by using .gitignore files.
  --ignore-case Ignore case when pattern matching.
  --matchdirs   Include directory names in -P pattern matching.
  --metafirst   Print meta-data at the beginning of each line.
  --info        Print information about files found in .info files.
  --noreport    Turn off file/directory count at end of tree listing.
  --charset X   Use charset X for terminal/HTML and indentation line output.
  --filelimit # Do not descend dirs with more than # files in them.
  -o filename   Output to file instead of stdout.
  ------- File options -------
  -q            Print non-printable characters as '?'.
  -N            Print non-printable characters as is.
  -Q            Quote filenames with double quotes.
  -p            Print the protections for each file.
  -u            Displays file owner or UID number.
  -g            Displays file group owner or GID number.
  -s            Print the size in bytes of each file.
  -h            Print the size in a more human readable way.
  --si          Like -h, but use in SI units (powers of 1000).
  -D            Print the date of last modification or (-c) status change.
  --timefmt <f> Print and format time according to the format <f>.
  -F            Appends '/', '=', '*', '@', '|' or '>' as per ls -F.
  --inodes      Print inode number of each file.
  --device      Print device ID number to which each file belongs.
  ------- Sorting options -------
  -v            Sort files alphanumerically by version.
  -t            Sort files by last modification time.
  -c            Sort files by last status change time.
  -U            Leave files unsorted.
  -r            Reverse the order of the sort.
  --dirsfirst   List directories before files (-U disables).
  --filesfirst  List files before directories (-U disables).
  --sort X      Select sort: name,version,size,mtime,ctime.
  ------- Graphics options -------
  -i            Don't print indentation lines.
  -A            Print ANSI lines graphic indentation lines.
  -S            Print with CP437 (console) graphics indentation lines.
  -n            Turn colorization off always (-C overrides).
  -C            Turn colorization on always.
  ------- XML/HTML/JSON options -------
  -X            Prints out an XML representation of the tree.
  -J            Prints out an JSON representation of the tree.
  -H baseHREF   Prints out HTML format with baseHREF as top directory.
  -T string     Replace the default HTML title and H1 header with string.
  --nolinks     Turn off hyperlinks in HTML output.
  ------- Input options -------
  --fromfile    Reads paths from files (.=stdin)
  ------- Miscellaneous options -------
  --version     Print version and exit.
  --help        Print usage and this help message and exit.
  --            Options processing terminator.

生成目录结构

  • 将控制台切换到需要生成文件结构的目录;
  • 使用 tree 命令生成当前目录的所在结构,并写入file.txt文件;
tree -L 1 >file.txt