Mac下使用tree打印项目目录结构或目录树
场景
在某些情况下,我们需要将java项目或其他项目的目录结构通过控制台打印出来,更直观的看到整个项目的情况,而不是通过代码遍历的形式打印。
基于这种应用场景,在mac和window操作系统下都可以使用tree工具来进行打印。这里重点基于mac操作系统来进行相应的安装和演示。以下操作均基于Mac操作系统。
安装tree
打开控制台,使用brew包管理工具安装tree。执行命令:
brew install tree
如果执行过程中遇到如下问题:
ershixiongdeMacBook-Pro:~ zzs$ brew install tree Error: You have not agreed to the Xcode license. Please resolve this by running: sudo xcodebuild -license accept
按照指示,执行命令:
sudo xcodebuild -license accept
输入电脑密码,再次执行上面的安装tree命令。系统首先会更新Homebrew,可能会花费一些时间,等待信息:
Updating Homebrew...
等待HomeBrew更新完成,会自动安装tree,安装结果显示如下信息:
==> Downloading https://homebrew.bintray.com/bottles/tree-1.8.0.mojave.bottle.tar.gz ######################################################################## 100.0% ==> Pouring tree-1.8.0.mojave.bottle.tar.gz 🍺 /usr/local/Cellar/tree/1.8.0: 8 files, 117KB ==> `brew cleanup` has not been run in 30 days, running now... Pruned 2 symbolic links and 3 directories from /usr/local
命令操作
安装完成可通过help命令查看使用方法,并打印出如下信息:
ershixiongdeMacBook-Pro:~ zzs$ tree --help usage: tree [-acdfghilnpqrstuvxACDFJQNSUX] [-H baseHREF] [-T title ] [-L level [-R]] [-P pattern] [-I pattern] [-o filename] [--version] [--help] [--inodes] [--device] [--noreport] [--nolinks] [--dirsfirst] [--charset charset] [--filelimit[=]#] [--si] [--timefmt[=]<f>] [--sort[=]<name>] [--matchdirs] [--ignore-case] [--fromfile] [--] [<directory list>] ------- Listing options ------- -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. --ignore-case Ignore case when pattern matching. --matchdirs Include directory names in -P pattern matching. --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. --timefmt <f> Print and format time according to the format <f>. -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. -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). --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,即可打印该目录下的所有层级及文件结构。
当然,也通过“-L”参数来控制打印目录的层级。比如,以下为打印Spring Boot项目2层目录结果的操作:
ershixiongdeMacBook-Pro:spring-boot zzs$ tree -L 2 . ├── pom.xml ├── spring-boot.iml ├── src │ ├── main │ └── test └── target ├── checkstyle-cachefile ├── checkstyle-checker.xml ├── checkstyle-header.txt ├── checkstyle-result.xml ├── checkstyle-suppressions.xml ├── classes ├── generated-sources ├── maven-archiver ├── maven-status ├── spring-boot-2.2.0.BUILD-SNAPSHOT-sources.jar └── spring-boot-2.2.0.BUILD-SNAPSHOT.jar 8 directories, 9 files ershixiongdeMacBook-Pro:spring-boot zzs$ cd .. ershixiongdeMacBook-Pro:spring-boot-project zzs$ tree -L 2 . ├── pom.xml ├── spring-boot │ ├── pom.xml │ ├── spring-boot.iml │ ├── src │ └── target ├── spring-boot-actuator │ ├── README.adoc │ ├── pom.xml │ ├── spring-boot-actuator.iml │ ├── src │ └── target ├── spring-boot-actuator-autoconfigure │ ├── pom.xml │ ├── spring-boot-actuator-autoconfigure.iml │ ├── src │ └── target ├── spring-boot-autoconfigure │ ├── pom.xml │ ├── spring-boot-autoconfigure.iml │ ├── src │ └── target ├── spring-boot-cli │ ├── pom.xml │ ├── samples │ ├── spring-boot-cli.iml │ ├── src │ └── test-samples ├── spring-boot-dependencies │ ├── pom.xml │ ├── spring-boot-dependencies.iml │ ├── src │ └── target ├── spring-boot-devtools │ ├── pom.xml │ ├── spring-boot-devtools.iml │ ├── src │ └── target ├── spring-boot-docs │ ├── pom.xml │ ├── spring-boot-docs.iml │ └── src ├── spring-boot-parent │ ├── pom.xml │ ├── spring-boot-parent.iml │ └── target ├── spring-boot-project.iml ├── spring-boot-properties-migrator │ ├── pom.xml │ ├── spring-boot-properties-migrator.iml │ ├── src │ └── target ├── spring-boot-starters │ ├── README.adoc │ ├── pom.xml │ ├── spring-boot-starter │ ├── spring-boot-starter-activemq │ ├── spring-boot-starter-actuator │ ├── spring-boot-starter-amqp │ ├── spring-boot-starter-aop │ ├── spring-boot-starter-artemis │ ├── spring-boot-starter-batch │ ├── spring-boot-starter-cache │ ├── spring-boot-starter-cloud-connectors │ ├── spring-boot-starter-data-cassandra │ ├── spring-boot-starter-data-cassandra-reactive │ ├── spring-boot-starter-data-couchbase │ ├── spring-boot-starter-data-couchbase-reactive │ ├── spring-boot-starter-data-elasticsearch │ ├── spring-boot-starter-data-jdbc │ ├── spring-boot-starter-data-jpa │ ├── spring-boot-starter-data-ldap │ ├── spring-boot-starter-data-mongodb │ ├── spring-boot-starter-data-mongodb-reactive │ ├── spring-boot-starter-data-neo4j │ ├── spring-boot-starter-data-redis │ ├── spring-boot-starter-data-redis-reactive │ ├── spring-boot-starter-data-rest │ ├── spring-boot-starter-data-solr │ ├── spring-boot-starter-freemarker │ ├── spring-boot-starter-groovy-templates │ ├── spring-boot-starter-hateoas │ ├── spring-boot-starter-integration │ ├── spring-boot-starter-jdbc │ ├── spring-boot-starter-jersey │ ├── spring-boot-starter-jetty │ ├── spring-boot-starter-jooq │ ├── spring-boot-starter-json │ ├── spring-boot-starter-jta-atomikos │ ├── spring-boot-starter-jta-bitronix │ ├── spring-boot-starter-log4j2 │ ├── spring-boot-starter-logging │ ├── spring-boot-starter-mail │ ├── spring-boot-starter-mustache │ ├── spring-boot-starter-oauth2-client │ ├── spring-boot-starter-oauth2-resource-server │ ├── spring-boot-starter-parent │ ├── spring-boot-starter-quartz │ ├── spring-boot-starter-reactor-netty │ ├── spring-boot-starter-rsocket │ ├── spring-boot-starter-security │ ├── spring-boot-starter-test │ ├── spring-boot-starter-thymeleaf │ ├── spring-boot-starter-tomcat │ ├── spring-boot-starter-undertow │ ├── spring-boot-starter-validation │ ├── spring-boot-starter-web │ ├── spring-boot-starter-web-services │ ├── spring-boot-starter-webflux │ ├── spring-boot-starter-websocket │ ├── spring-boot-starters.iml │ ├── src │ └── target ├── spring-boot-test │ ├── pom.xml │ ├── spring-boot-test.iml │ ├── src │ └── target ├── spring-boot-test-autoconfigure │ ├── pom.xml │ ├── spring-boot-test-autoconfigure.iml │ ├── src │ └── target └── spring-boot-tools ├── pom.xml ├── spring-boot-antlib ├── spring-boot-autoconfigure-processor ├── spring-boot-configuration-docs ├── spring-boot-configuration-metadata ├── spring-boot-configuration-processor ├── spring-boot-gradle-plugin ├── spring-boot-loader ├── spring-boot-loader-tools ├── spring-boot-maven-plugin ├── spring-boot-test-support ├── spring-boot-tools.iml └── target 105 directories, 32 files
看起来是不是很帅气,很友好。那么如果想把打印的内容输出到文件中,比如项目的README.md中。可以通过如下命令:
tree -L 2 >README.md
这样,上面打印出来的内容便可以输入到同目录下的README.md文件内了。
关注公众号:程序新视界,一个让你软实力、硬技术同步提升的平台
除非注明,否则均为程序新视界原创文章,转载必须以链接形式标明本文链接