命令行打印文件树列表: tree

Linux & Mac

1.下载tree lib

//mac
brew install tree
//centos
yum install tree
//ubuntu
apt-get install tree

用法

//显示所有文件
tree
//显示深度2层
tree -L 2

2. 命令find组合

find . -print | sed -e 's;[^/]*/;|____;g;s;____|; |;g' > structure.txt

移除node_module

find . -print | grep -v "node" | sed -e 's;[^/]*/;|____;g;s;____|; |;g' > structure.txt

缺点: 不能打印深度选择,或者需要更高层次的语法编写。这里姑且先用着。够用了。

Windows

windows自带tree命令。默认只显示目录

//只显示目录
tree

//显示文件
tree /f

//输出到文件
tree /f > structure.txt

但,由于windows命令不熟悉,也不想花时间去学习windows的命令。那么可以装一个git shell或者推荐使用cmder。

Customization

手动写一个列表。先序遍历:

/**
 * 先序遍历 postorder traversal  先输出根节点,然后输出子节点
 * Created by Ryan Miao on 9/24/17.
 */
public class PostorderTraversal {

    @Test
    public void testPostOrder() {
        String root = "/Users/ryan/workspace/learning/hexo-blog-src";
        int stop = 3;
        ArrayList<String> ignores = Lists.newArrayList(".git", ".deploy_git", "node_modules", ".DS_Store");

        printTree(root, stop, ignores);
    }

    private void printTree(String rootFile, int stop, List<String> ignores) {
        printTree(new File(rootFile), 0, stop, ignores, false, true);
    }

    private void printTree(File rootFile, int level, int stop, List<String> ignores, boolean isLastChild, boolean isParentLast) {
        String name = rootFile.getName();
        if (level > stop || ignores.stream().anyMatch(name::contains)) {
            return;
        }
        if (level == 0) {
            System.out.println(".");
        } else {
            prettyPrint(level, rootFile, isLastChild, isParentLast);
        }

        if (rootFile.isDirectory()) {
            File[] files = rootFile.listFiles();
            if (files != null) {
                int length = files.length;
                for (int i = 0; i < length; i++) {
                    if (i == length - 1) {
                        //
                        printTree(files[i], level + 1, stop, ignores, true, isLastChild);
                    } else {
                        printTree(files[i], level + 1, stop, ignores, false, isLastChild);
                    }
                }
            }
        }
    }

    private void prettyPrint(int level, File file, boolean isLastChild, boolean isParentLast) {
        StringBuilder sb = new StringBuilder();
        if (level != 1) {
            sb.append("│");
        }

        for (int i = 0; i < level - 2; i++) {
            if (isParentLast && i == level - 3) {
                sb.append("    ");
                break;
            }
            sb.append("   |");
        }
        if (level != 1) {
            sb.append("   ");
        }

        if (isLastChild) {
            sb.append("└──");
        } else {
            sb.append("├──");
        }

        sb.append(file.getName());
        System.out.println(sb.toString());
    }
}

目前有个bug,就是递归到深入之后,孙子无法得知祖父是不是最终叶子,因此虚线没有去掉。不过,简单能用还是可以的。 console output:

.
├──_config.yml
├──db.json
├──package-lock.json
├──package.json
├──public
│   ├──2017
│   |   ├──05
│   |   ├──06
│   |   ├──07
│   |   ├──08
│   |   └──09
│   ├──404.html
│   ├──about
│   |   └──index.html
│   ├──archives
│   |   ├──2017
│   |   ├──index.html
│   |   └──page
│   ├──baidusitemap.xml
│   ├──categories
│   |   ├──Cache
│   |   ├──Git
│   |   ├──Hexo
│   |   ├──index.html
│   |   ├──Java
│   |   ├──Java8
│   |   ├──Javascript
│   |   ├──Linux
│   |   ├──MySQL
│   |   ├──ReactJS
│   |   ├──redis
│   |   ├──Server
│   |   ├──Spring
│   |   ├──Tools
│   |   ├──思考
│   |   └──读书
│   ├──CNAME
│   ├──css
│   |   └──main.css
│   ├──gallery
│   |   └──index.html
│   ├──images
│   |   ├──algolia_logo.svg
│   |   ├──alipay.jpg
│   |   ├──avatar.gif
│   |   ├──avatar.jpeg
│   |   ├──bk.bmp
│   |   ├──bk.jpg
│   |   ├──bk.png
│   |   ├──bk2.jpg
│   |   ├──cc-by-nc-nd.svg
│   |   ├──cc-by-nc-sa.svg
│   |   ├──cc-by-nc.svg
│   |   ├──cc-by-nd.svg
│   |   ├──cc-by-sa.svg
│   |   ├──cc-by.svg
│   |   ├──cc-zero.svg
│   |   ├──loading.gif
│   |   ├──placeholder.gif
│   |   ├──quote-l.svg
│   |   ├──quote-r.svg
│   |   ├──searchicon.png
│   |   └──wechat.jpg
│   ├──index.html
│   ├──js
│   |   └──src
│   ├──lib
│   |   ├──algolia-instant-search
│   |   ├──canvas-nest
│   |   ├──canvas-ribbon
│   |   ├──fancybox
│   |   ├──fastclick
│   |   ├──font-awesome
│   |   ├──Han
│   |   ├──jquery
│   |   ├──jquery_lazyload
│   |   ├──pace
│   |   ├──three
│   |   ├──ua-parser-js
│   |   └──velocity
│   ├──links
│   |   └──index.html
│   ├──page
│   |   ├──2
│   |   └──3
│   ├──search.xml
│   ├──sitemap.xml
│   └──tags
│       ├──ArrayList
│       ├──banner
│       ├──Dropwizard
│       ├──EhCache
│       ├──Feign
│       ├──Git
│       ├──Hexo
│       ├──index.html
│       ├──Java
│       ├──Java8
│       ├──Javascript
│       ├──Lambda
│       ├──Linux
│       ├──Mac
│       ├──MySQL
│       ├──NodeJS
│       ├──ReactJS
│       ├──reading
│       ├──redis
│       ├──Server
│       ├──Spring
│       ├──SpringMVC
│       ├──team
│       ├──UTF-8
│       ├──vim
│       ├──Webpack
│       ├──Windows
│       └──码云
├──README.md
├──scaffolds
│   ├──draft.md
│   ├──page.md
│   └──post.md
├──source
│   ├──404.html
│   ├──_data
│   |   └──links.yml
│   ├──_posts
│   |   ├──banner-ascii-2-txt.md
│   |   ├──dropwizard-feign.md
│   |   ├──Ehcache3入门-Spring集成.md
│   |   ├──git-rebase.md
│   |   ├──hello-react-js.md
│   |   ├──hello-world.md
│   |   ├──hexo-github-oschina.md
│   |   ├──hexo-next-hypercomments.md
│   |   ├──hexo-next-shang.md
│   |   ├──http-server-static.md
│   |   ├──Java-ArrayList-remove.md
│   |   ├──java-utf8-iso-乱码根源.md
│   |   ├──java8-in-action-2.md
│   |   ├──java8-lambda.md
│   |   ├──js-cros.md
│   |   ├──mac-install-mysql.md
│   |   ├──mac-install-redis.md
│   |   ├──react-tutorial-1.md
│   |   ├──reading-schedule.md
│   |   ├──spring400.md
│   |   ├──switch-to-oschina.md
│   |   ├──team-first-chance.md
│   |   ├──tree.md
│   |   ├──vim.md
│   |   └──why-string-is-immutable.md
│   ├──about
│   |   └──index.md
│   ├──categories
│   |   └──index.md
│   ├──CNAME
│   ├──gallery
│   |   └──index.md
│   ├──images
│   |   ├──alipay.jpg
│   |   ├──avatar.jpeg
│   |   ├──bk.bmp
│   |   ├──bk.jpg
│   |   ├──bk.png
│   |   ├──bk2.jpg
│   |   └──wechat.jpg
│   ├──links
│   |   └──index.md
│   └──tags
│       └──index.md
├──themes
│   ├──landscape
│   |   ├──_config.yml
│   |   ├──Gruntfile.js
│   |   ├──languages
│   |   ├──layout
│   |   ├──LICENSE
│   |   ├──package.json
│   |   ├──README.md
│   |   ├──scripts
│   |   └──source
│   └──next
│       ├──.bowerrc
│       ├──.editorconfig
│       ├──.hound.yml
│       ├──.javascript_ignore
│       ├──.jshintrc
│       ├──.stylintrc
│       ├──.travis.yml
│       ├──_config.yml
│       ├──bower.json
│       ├──gulpfile.coffee
│       ├──languages
│       ├──layout
│       ├──LICENSE
│       ├──package.json
│       ├──README.cn.md
│       ├──README.md
│       ├──scripts
│       ├──source
│       └──test
└──thems-bak
│   └──next
│       ├──_config.yml
│       └──custom.styl

参考

mac 下的 tree 命令 终端展示你的目录树结构

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏老九学堂

【新手必读】Java初学者,你遇到的问题都在这了

我们在初次接触某种编程语言时,都会有许许多多的疑问和困惑,老九君收集了小伙伴遇到的一些常见的Java基础问题,希望能对大家的Java学习有所帮助。 初识篇 1、...

3015
来自专栏北京马哥教育

Python imports指南

来源:Python程序员 ID:pythonbuluo 声明:如果你每天写Python,你会发现这篇文章中没有新东西。 这是专为那些像运维人员等偶尔使用Pyt...

2405
来自专栏游戏杂谈

windows下node.js调用bat

如果指定了cwd,它会切换bat执行的目录,类似cd的功能,如果未指定默认为当前调用程序的目录。如果bat有输出错误,例如创建指定的文件/目录已经存在时,会返回...

732
来自专栏草根专栏

Python数据分析(一): ipython 技巧!

不一定非得使用Jupyter Notebook,试试ipython命令行 安装 ipython 我只试过Windows 10环境下的。 1.安装python安装...

2766
来自专栏Android开发指南

Android热修复AndFix

3448
来自专栏软件开发 -- 分享 互助 成长

java入门

一、java的运行机制 高级语言的运行机制主要有编译型和解释型两种。 C/C++属于编译型语言,由专门的编译器针对特定的操作系统平台进行翻译,生成可执行代码,特...

17710
来自专栏彭湖湾的编程世界

【npm】伙计,给我来一杯package.json!不加糖

前言:夜深了,我熬了一锅热气腾腾的package.json,给大家端上来,希望大家喜欢 json和JS对象的区别 package.json,顾名思义,它是一个j...

1796
来自专栏游戏杂谈

node.js获取图片文件的真实类型

遇到一个需求:假定有一个图片文件,真实的类型为jpg,而有人偷懒把jpg直接复制一张,存为同名的png文件,这样在as3读取文件时不会遇到问题,但手机c++在读...

593
来自专栏逆向技术

学习逆向知识之用于游戏外挂的实现.第二讲,快速寻找植物大战僵尸阳光基址.以及动态基址跟静态基址的区别

              通过游戏外挂,学习逆向技术之快速寻找植物大战僵尸阳光基址.以及动态基址跟静态基址的区别

800
来自专栏ascii0x03的安全笔记

Linux下ls命令显示符号链接权限为777的探索

Linux下ls命令显示符号链接权限为777的探索                                                ——深入ls、...

4975

扫码关注云+社区