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
//只显示目录 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),ignores,false,true); } private void printTree(File rootFile,int level,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,true,isLastChild); } else { printTree(files[i],isLastChild); } } } } } private void prettyPrint(int level,File file,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